/* SWFObject v2.1 <http://code.google.com/p/swfobject/>
	Copyright (c) 2007-2008 Geoff Stearns, Michael Williams, and Bobby van der Sluis
	This software is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
*/
var swfobject=function(){var b="undefined",Q="object",n="Shockwave Flash",p="ShockwaveFlash.ShockwaveFlash",P="application/x-shockwave-flash",m="SWFObjectExprInst",j=window,K=document,T=navigator,o=[],N=[],i=[],d=[],J,Z=null,M=null,l=null,e=false,A=false;var h=function(){var v=typeof K.getElementById!=b&&typeof K.getElementsByTagName!=b&&typeof K.createElement!=b,AC=[0,0,0],x=null;if(typeof T.plugins!=b&&typeof T.plugins[n]==Q){x=T.plugins[n].description;if(x&&!(typeof T.mimeTypes!=b&&T.mimeTypes[P]&&!T.mimeTypes[P].enabledPlugin)){x=x.replace(/^.*\s+(\S+\s+\S+$)/,"$1");AC[0]=parseInt(x.replace(/^(.*)\..*$/,"$1"),10);AC[1]=parseInt(x.replace(/^.*\.(.*)\s.*$/,"$1"),10);AC[2]=/r/.test(x)?parseInt(x.replace(/^.*r(.*)$/,"$1"),10):0}}else{if(typeof j.ActiveXObject!=b){var y=null,AB=false;try{y=new ActiveXObject(p+".7")}catch(t){try{y=new ActiveXObject(p+".6");AC=[6,0,21];y.AllowScriptAccess="always"}catch(t){if(AC[0]==6){AB=true}}if(!AB){try{y=new ActiveXObject(p)}catch(t){}}}if(!AB&&y){try{x=y.GetVariable("$version");if(x){x=x.split(" ")[1].split(",");AC=[parseInt(x[0],10),parseInt(x[1],10),parseInt(x[2],10)]}}catch(t){}}}}var AD=T.userAgent.toLowerCase(),r=T.platform.toLowerCase(),AA=/webkit/.test(AD)?parseFloat(AD.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,q=false,z=r?/win/.test(r):/win/.test(AD),w=r?/mac/.test(r):/mac/.test(AD);/*@cc_on q=true;@if(@_win32)z=true;@elif(@_mac)w=true;@end@*/return{w3cdom:v,pv:AC,webkit:AA,ie:q,win:z,mac:w}}();var L=function(){if(!h.w3cdom){return }f(H);if(h.ie&&h.win){try{K.write("<script id=__ie_ondomload defer=true src=//:><\/script>");J=C("__ie_ondomload");if(J){I(J,"onreadystatechange",S)}}catch(q){}}if(h.webkit&&typeof K.readyState!=b){Z=setInterval(function(){if(/loaded|complete/.test(K.readyState)){E()}},10)}if(typeof K.addEventListener!=b){K.addEventListener("DOMContentLoaded",E,null)}R(E)}();function S(){if(J.readyState=="complete"){J.parentNode.removeChild(J);E()}}function E(){if(e){return }if(h.ie&&h.win){var v=a("span");try{var u=K.getElementsByTagName("body")[0].appendChild(v);u.parentNode.removeChild(u)}catch(w){return }}e=true;if(Z){clearInterval(Z);Z=null}var q=o.length;for(var r=0;r<q;r++){o[r]()}}function f(q){if(e){q()}else{o[o.length]=q}}function R(r){if(typeof j.addEventListener!=b){j.addEventListener("load",r,false)}else{if(typeof K.addEventListener!=b){K.addEventListener("load",r,false)}else{if(typeof j.attachEvent!=b){I(j,"onload",r)}else{if(typeof j.onload=="function"){var q=j.onload;j.onload=function(){q();r()}}else{j.onload=r}}}}}function H(){var t=N.length;for(var q=0;q<t;q++){var u=N[q].id;if(h.pv[0]>0){var r=C(u);if(r){N[q].width=r.getAttribute("width")?r.getAttribute("width"):"0";N[q].height=r.getAttribute("height")?r.getAttribute("height"):"0";if(c(N[q].swfVersion)){if(h.webkit&&h.webkit<312){Y(r)}W(u,true)}else{if(N[q].expressInstall&&!A&&c("6.0.65")&&(h.win||h.mac)){k(N[q])}else{O(r)}}}}else{W(u,true)}}}function Y(t){var q=t.getElementsByTagName(Q)[0];if(q){var w=a("embed"),y=q.attributes;if(y){var v=y.length;for(var u=0;u<v;u++){if(y[u].nodeName=="DATA"){w.setAttribute("src",y[u].nodeValue)}else{w.setAttribute(y[u].nodeName,y[u].nodeValue)}}}var x=q.childNodes;if(x){var z=x.length;for(var r=0;r<z;r++){if(x[r].nodeType==1&&x[r].nodeName=="PARAM"){w.setAttribute(x[r].getAttribute("name"),x[r].getAttribute("value"))}}}t.parentNode.replaceChild(w,t)}}function k(w){A=true;var u=C(w.id);if(u){if(w.altContentId){var y=C(w.altContentId);if(y){M=y;l=w.altContentId}}else{M=G(u)}if(!(/%$/.test(w.width))&&parseInt(w.width,10)<310){w.width="310"}if(!(/%$/.test(w.height))&&parseInt(w.height,10)<137){w.height="137"}K.title=K.title.slice(0,47)+" - Flash Player Installation";var z=h.ie&&h.win?"ActiveX":"PlugIn",q=K.title,r="MMredirectURL="+j.location+"&MMplayerType="+z+"&MMdoctitle="+q,x=w.id;if(h.ie&&h.win&&u.readyState!=4){var t=a("div");x+="SWFObjectNew";t.setAttribute("id",x);u.parentNode.insertBefore(t,u);u.style.display="none";var v=function(){u.parentNode.removeChild(u)};I(j,"onload",v)}U({data:w.expressInstall,id:m,width:w.width,height:w.height},{flashvars:r},x)}}function O(t){if(h.ie&&h.win&&t.readyState!=4){var r=a("div");t.parentNode.insertBefore(r,t);r.parentNode.replaceChild(G(t),r);t.style.display="none";var q=function(){t.parentNode.removeChild(t)};I(j,"onload",q)}else{t.parentNode.replaceChild(G(t),t)}}function G(v){var u=a("div");if(h.win&&h.ie){u.innerHTML=v.innerHTML}else{var r=v.getElementsByTagName(Q)[0];if(r){var w=r.childNodes;if(w){var q=w.length;for(var t=0;t<q;t++){if(!(w[t].nodeType==1&&w[t].nodeName=="PARAM")&&!(w[t].nodeType==8)){u.appendChild(w[t].cloneNode(true))}}}}}return u}function U(AG,AE,t){var q,v=C(t);if(v){if(typeof AG.id==b){AG.id=t}if(h.ie&&h.win){var AF="";for(var AB in AG){if(AG[AB]!=Object.prototype[AB]){if(AB.toLowerCase()=="data"){AE.movie=AG[AB]}else{if(AB.toLowerCase()=="styleclass"){AF+=' class="'+AG[AB]+'"'}else{if(AB.toLowerCase()!="classid"){AF+=" "+AB+'="'+AG[AB]+'"'}}}}}var AD="";for(var AA in AE){if(AE[AA]!=Object.prototype[AA]){AD+='<param name="'+AA+'" value="'+AE[AA]+'" />'}}v.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+AF+">"+AD+"</object>";i[i.length]=AG.id;q=C(AG.id)}else{if(h.webkit&&h.webkit<312){var AC=a("embed");AC.setAttribute("type",P);for(var z in AG){if(AG[z]!=Object.prototype[z]){if(z.toLowerCase()=="data"){AC.setAttribute("src",AG[z])}else{if(z.toLowerCase()=="styleclass"){AC.setAttribute("class",AG[z])}else{if(z.toLowerCase()!="classid"){AC.setAttribute(z,AG[z])}}}}}for(var y in AE){if(AE[y]!=Object.prototype[y]){if(y.toLowerCase()!="movie"){AC.setAttribute(y,AE[y])}}}v.parentNode.replaceChild(AC,v);q=AC}else{var u=a(Q);u.setAttribute("type",P);for(var x in AG){if(AG[x]!=Object.prototype[x]){if(x.toLowerCase()=="styleclass"){u.setAttribute("class",AG[x])}else{if(x.toLowerCase()!="classid"){u.setAttribute(x,AG[x])}}}}for(var w in AE){if(AE[w]!=Object.prototype[w]&&w.toLowerCase()!="movie"){F(u,w,AE[w])}}v.parentNode.replaceChild(u,v);q=u}}}return q}function F(t,q,r){var u=a("param");u.setAttribute("name",q);u.setAttribute("value",r);t.appendChild(u)}function X(r){var q=C(r);if(q&&(q.nodeName=="OBJECT"||q.nodeName=="EMBED")){if(h.ie&&h.win){if(q.readyState==4){B(r)}else{j.attachEvent("onload",function(){B(r)})}}else{q.parentNode.removeChild(q)}}}function B(t){var r=C(t);if(r){for(var q in r){if(typeof r[q]=="function"){r[q]=null}}r.parentNode.removeChild(r)}}function C(t){var q=null;try{q=K.getElementById(t)}catch(r){}return q}function a(q){return K.createElement(q)}function I(t,q,r){t.attachEvent(q,r);d[d.length]=[t,q,r]}function c(t){var r=h.pv,q=t.split(".");q[0]=parseInt(q[0],10);q[1]=parseInt(q[1],10)||0;q[2]=parseInt(q[2],10)||0;return(r[0]>q[0]||(r[0]==q[0]&&r[1]>q[1])||(r[0]==q[0]&&r[1]==q[1]&&r[2]>=q[2]))?true:false}function V(v,r){if(h.ie&&h.mac){return }var u=K.getElementsByTagName("head")[0],t=a("style");t.setAttribute("type","text/css");t.setAttribute("media","screen");if(!(h.ie&&h.win)&&typeof K.createTextNode!=b){t.appendChild(K.createTextNode(v+" {"+r+"}"))}u.appendChild(t);if(h.ie&&h.win&&typeof K.styleSheets!=b&&K.styleSheets.length>0){var q=K.styleSheets[K.styleSheets.length-1];if(typeof q.addRule==Q){q.addRule(v,r)}}}function W(t,q){var r=q?"visible":"hidden";if(e&&C(t)){C(t).style.visibility=r}else{V("#"+t,"visibility:"+r)}}function g(s){var r=/[\\\"<>\.;]/;var q=r.exec(s)!=null;return q?encodeURIComponent(s):s}var D=function(){if(h.ie&&h.win){window.attachEvent("onunload",function(){var w=d.length;for(var v=0;v<w;v++){d[v][0].detachEvent(d[v][1],d[v][2])}var t=i.length;for(var u=0;u<t;u++){X(i[u])}for(var r in h){h[r]=null}h=null;for(var q in swfobject){swfobject[q]=null}swfobject=null})}}();return{registerObject:function(u,q,t){if(!h.w3cdom||!u||!q){return }var r={};r.id=u;r.swfVersion=q;r.expressInstall=t?t:false;N[N.length]=r;W(u,false)},getObjectById:function(v){var q=null;if(h.w3cdom){var t=C(v);if(t){var u=t.getElementsByTagName(Q)[0];if(!u||(u&&typeof t.SetVariable!=b)){q=t}else{if(typeof u.SetVariable!=b){q=u}}}}return q},embedSWF:function(x,AE,AB,AD,q,w,r,z,AC){if(!h.w3cdom||!x||!AE||!AB||!AD||!q){return }AB+="";AD+="";if(c(q)){W(AE,false);var AA={};if(AC&&typeof AC===Q){for(var v in AC){if(AC[v]!=Object.prototype[v]){AA[v]=AC[v]}}}AA.data=x;AA.width=AB;AA.height=AD;var y={};if(z&&typeof z===Q){for(var u in z){if(z[u]!=Object.prototype[u]){y[u]=z[u]}}}if(r&&typeof r===Q){for(var t in r){if(r[t]!=Object.prototype[t]){if(typeof y.flashvars!=b){y.flashvars+="&"+t+"="+r[t]}else{y.flashvars=t+"="+r[t]}}}}f(function(){U(AA,y,AE);if(AA.id==AE){W(AE,true)}})}else{if(w&&!A&&c("6.0.65")&&(h.win||h.mac)){A=true;W(AE,false);f(function(){var AF={};AF.id=AF.altContentId=AE;AF.width=AB;AF.height=AD;AF.expressInstall=w;k(AF)})}}},getFlashPlayerVersion:function(){return{major:h.pv[0],minor:h.pv[1],release:h.pv[2]}},hasFlashPlayerVersion:c,createSWF:function(t,r,q){if(h.w3cdom){return U(t,r,q)}else{return undefined}},removeSWF:function(q){if(h.w3cdom){X(q)}},createCSS:function(r,q){if(h.w3cdom){V(r,q)}},addDomLoadEvent:f,addLoadEvent:R,getQueryParamValue:function(v){var u=K.location.search||K.location.hash;if(v==null){return g(u)}if(u){var t=u.substring(1).split("&");for(var r=0;r<t.length;r++){if(t[r].substring(0,t[r].indexOf("="))==v){return g(t[r].substring((t[r].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(A&&M){var q=C(m);if(q){q.parentNode.replaceChild(M,q);if(l){W(l,true);if(h.ie&&h.win){M.style.display="block"}}M=null;l=null;A=false}}}}}();

/** * SWFAddress 2.3: Deep linking for Flash and Ajax <http://www.asual.com/swfaddress/> * * SWFAddress is (c) 2006-2009 Rostislav Hristov and contributors * This software is released under the MIT License <http://www.opensource.org/licenses/mit-license.php> * */if(typeof asual=="undefined"){var asual={}}if(typeof asual.util=="undefined"){asual.util={}}asual.util.Browser=new function(){var b=navigator.userAgent.toLowerCase(),a=/webkit/.test(b),e=/opera/.test(b),c=/msie/.test(b)&&!/opera/.test(b),d=/mozilla/.test(b)&&!/(compatible|webkit)/.test(b),f=parseFloat(c?b.substr(b.indexOf("msie")+4):(b.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1]);this.toString=function(){return"[class Browser]"};this.getVersion=function(){return f};this.isMSIE=function(){return c};this.isSafari=function(){return a};this.isOpera=function(){return e};this.isMozilla=function(){return d}};asual.util.Events=new function(){var c="DOMContentLoaded",j="onstop",k=window,h=document,b=[],a=asual.util,e=a.Browser,d=e.isMSIE(),g=e.isSafari();this.toString=function(){return"[class Events]"};this.addListener=function(n,l,m){b.push({o:n,t:l,l:m});if(!(l==c&&(d||g))){if(n.addEventListener){n.addEventListener(l,m,false)}else{if(n.attachEvent){n.attachEvent("on"+l,m)}}}};this.removeListener=function(p,m,n){for(var l=0,o;o=b[l];l++){if(o.o==p&&o.t==m&&o.l==n){b.splice(l,1);break}}if(!(m==c&&(d||g))){if(p.removeEventListener){p.removeEventListener(m,n,false)}else{if(p.detachEvent){p.detachEvent("on"+m,n)}}}};var i=function(){for(var m=0,l;l=b[m];m++){if(l.t!=c){a.Events.removeListener(l.o,l.t,l.l)}}};var f=function(){if(h.readyState=="interactive"){function l(){h.detachEvent(j,l);i()}h.attachEvent(j,l);k.setTimeout(function(){h.detachEvent(j,l)},0)}};if(d||g){(function(){try{if((d&&h.body)||!/loaded|complete/.test(h.readyState)){h.documentElement.doScroll("left")}}catch(m){return setTimeout(arguments.callee,0)}for(var l=0,m;m=b[l];l++){if(m.t==c){m.l.call(null)}}})()}if(d){k.attachEvent("onbeforeunload",f)}this.addListener(k,"unload",i)};asual.util.Functions=new function(){this.toString=function(){return"[class Functions]"};this.bind=function(f,b,e){for(var c=2,d,a=[];d=arguments[c];c++){a.push(d)}return function(){return f.apply(b,a)}}};var SWFAddressEvent=function(d){this.toString=function(){return"[object SWFAddressEvent]"};this.type=d;this.target=[SWFAddress][0];this.value=SWFAddress.getValue();this.path=SWFAddress.getPath();this.pathNames=SWFAddress.getPathNames();this.parameters={};var c=SWFAddress.getParameterNames();for(var b=0,a=c.length;b<a;b++){this.parameters[c[b]]=SWFAddress.getParameter(c[b])}this.parameterNames=c};SWFAddressEvent.INIT="init";SWFAddressEvent.CHANGE="change";var SWFAddress=new function(){var _getHash=function(){var index=_l.href.indexOf("#");return index!=-1?_ec(_dc(_l.href.substr(index+1))):""};var _getWindow=function(){try{top.document;return top}catch(e){return window}};var _strictCheck=function(value,force){if(_opts.strict){value=force?(value.substr(0,1)!="/"?"/"+value:value):(value==""?"/":value)}return value};var _ieLocal=function(value,direction){return(_msie&&_l.protocol=="file:")?(direction?_value.replace(/\?/,"%3F"):_value.replace(/%253F/,"?")):value};var _searchScript=function(el){for(var i=0,l=el.childNodes.length,s;i<l;i++){if(el.childNodes[i].src){_url=String(el.childNodes[i].src)}if(s=_searchScript(el.childNodes[i])){return s}}};var _titleCheck=function(){if(_d.title!=_title&&_d.title.indexOf("#")!=-1){_d.title=_title}};var _listen=function(){if(!_silent){var hash=_getHash();var diff=!(_value==hash);if(_safari&&_version<523){if(_length!=_h.length){_length=_h.length;if(typeof _stack[_length-1]!=UNDEFINED){_value=_stack[_length-1]}_update.call(this)}}else{if(_msie&&diff){if(_version<7){_l.reload()}else{this.setValue(hash)}}else{if(diff){_value=hash;_update.call(this)}}}if(_msie){_titleCheck.call(this)}}};var _bodyClick=function(e){if(_popup.length>0){var popup=window.open(_popup[0],_popup[1],eval(_popup[2]));if(typeof _popup[3]!=UNDEFINED){eval(_popup[3])}}_popup=[]};var _swfChange=function(){for(var i=0,id,obj,value=SWFAddress.getValue(),setter="setSWFAddressValue";id=_ids[i];i++){obj=document.getElementById(id);if(obj){if(obj.parentNode&&typeof obj.parentNode.so!=UNDEFINED){obj.parentNode.so.call(setter,value)}else{if(!(obj&&typeof obj[setter]!=UNDEFINED)){var objects=obj.getElementsByTagName("object");var embeds=obj.getElementsByTagName("embed");obj=((objects[0]&&typeof objects[0][setter]!=UNDEFINED)?objects[0]:((embeds[0]&&typeof embeds[0][setter]!=UNDEFINED)?embeds[0]:null))}if(obj){obj[setter](value)}}}else{if(obj=document[id]){if(typeof obj[setter]!=UNDEFINED){obj[setter](value)}}}}};var _jsDispatch=function(type){this.dispatchEvent(new SWFAddressEvent(type));type=type.substr(0,1).toUpperCase()+type.substr(1);if(typeof this["on"+type]==FUNCTION){this["on"+type]()}};var _jsInit=function(){if(_util.Browser.isSafari()){_d.body.addEventListener("click",_bodyClick)}_jsDispatch.call(this,"init")};var _jsChange=function(){_swfChange();_jsDispatch.call(this,"change")};var _update=function(){_jsChange.call(this);_st(_functions.bind(_track,this),10)};var _track=function(){var value=(_l.pathname+(/\/$/.test(_l.pathname)?"":"/")+this.getValue()).replace(/\/\//,"/").replace(/^\/$/,"");var fn=window[_opts.tracker];if(typeof fn==FUNCTION){fn(value)}else{if(typeof pageTracker!=UNDEFINED&&typeof pageTracker._trackPageview==FUNCTION){pageTracker._trackPageview(value)}else{if(typeof urchinTracker==FUNCTION){urchinTracker(value)}}}};var _htmlWrite=function(){var doc=_iframe.contentWindow.document;doc.open();doc.write("<html><head><title>"+_d.title+"</title><script>var "+ID+' = "'+_getHash()+'";<\/script></head></html>');doc.close()};var _htmlLoad=function(){var win=_iframe.contentWindow;var src=win.location.href;_value=(typeof win[ID]!=UNDEFINED?win[ID]:"");if(_value!=_getHash()){_update.call(SWFAddress);_l.hash=_ieLocal(_value,true)}};var _load=function(){if(!_loaded){_loaded=true;if(_msie&&_version<8){var iframe='<iframe id="'+ID+'" src="javascript:false;" width="0" height="0"></iframe>';_d.body.innerHTML=iframe+_d.body.innerHTML;_iframe=_d.getElementById(ID);_st(function(){_events.addListener(_iframe,"load",_htmlLoad);if(typeof _iframe.contentWindow[ID]==UNDEFINED){_htmlWrite()}},50)}else{if(_safari){if(_version<418){_d.body.innerHTML+='<form id="'+ID+'" style="position:absolute;top:-9999px;" method="get"></form>';_form=_d.getElementById(ID)}if(typeof _l[ID]==UNDEFINED){_l[ID]={}}if(typeof _l[ID][_l.pathname]!=UNDEFINED){_stack=_l[ID][_l.pathname].split(",")}}}_st(_functions.bind(function(){_jsInit.call(this);_jsChange.call(this);_track.call(this)},this),1);if(_msie&&_version>=8){_d.body.onhashchange=_functions.bind(_listen,this);_si(_functions.bind(_titleCheck,this),50)}else{_si(_functions.bind(_listen,this),50)}}};var ID="swfaddress",FUNCTION="function",UNDEFINED="undefined",_util=asual.util,_browser=_util.Browser,_events=_util.Events,_functions=_util.Functions,_version=_browser.getVersion(),_msie=_browser.isMSIE(),_mozilla=_browser.isMozilla(),_opera=_browser.isOpera(),_safari=_browser.isSafari(),_supported=false,_t=_getWindow(),_d=_t.document,_h=_t.history,_l=_t.location,_si=setInterval,_st=setTimeout,_dc=decodeURI,_ec=encodeURI,_iframe,_form,_url,_title=_d.title,_length=_h.length,_silent=false,_loaded=false,_justset=true,_juststart=true,_ref=this,_stack=[],_ids=[],_popup=[],_listeners={},_value=_getHash(),_opts={history:true,strict:true};_supported=(_mozilla&&_version>=1)||(_msie&&_version>=6)||(_opera&&_version>=9.5)||(_safari&&_version>=312);if(_supported){for(var i=1;i<_length;i++){_stack.push("")}_stack.push(_getHash());if(_msie&&_l.hash!=_getHash()){_l.hash="#"+_ieLocal(_getHash(),true)}if(_opera){history.navigationMode="compatible"}_searchScript(document);var _qi=_url.indexOf("?");if(_url&&_qi>-1){var param,params=_url.substr(_qi+1).split("&");for(var i=0,p;p=params[i];i++){param=p.split("=");if(/^(history|strict)$/.test(param[0])){_opts[param[0]]=(isNaN(param[1])?/^(true|yes)$/i.test(param[1]):(parseInt(param[1])!=0))}if(/^tracker$/.test(param[0])){_opts[param[0]]=param[1]}}}if(_msie){_titleCheck.call(this)}if(window==_t){_events.addListener(document,"DOMContentLoaded",_functions.bind(_load,this))}_events.addListener(_t,"load",_functions.bind(_load,this))}else{if((!_supported&&_l.href.indexOf("#")!=-1)||(_safari&&_version<418&&_l.href.indexOf("#")!=-1&&_l.search!="")){_d.open();_d.write('<html><head><meta http-equiv="refresh" content="0;url='+_l.href.substr(0,_l.href.indexOf("#"))+'" /></head></html>');_d.close()}else{_track()}}this.toString=function(){return"[class SWFAddress]"};this.back=function(){_h.back()};this.forward=function(){_h.forward()};this.up=function(){var path=this.getPath();this.setValue(path.substr(0,path.lastIndexOf("/",path.length-2)+(path.substr(path.length-1)=="/"?1:0)))};this.go=function(delta){_h.go(delta)};this.href=function(url,target){target=typeof target!=UNDEFINED?target:"_self";if(target=="_self"){self.location.href=url}else{if(target=="_top"){_l.href=url}else{if(target=="_blank"){window.open(url)}else{_t.frames[target].location.href=url}}}};this.popup=function(url,name,options,handler){try{var popup=window.open(url,name,eval(options));if(typeof handler!=UNDEFINED){eval(handler)}}catch(ex){}_popup=arguments};this.getIds=function(){return _ids};this.getId=function(index){return _ids[0]};this.setId=function(id){_ids[0]=id};this.addId=function(id){this.removeId(id);_ids.push(id)};this.removeId=function(id){for(var i=0;i<_ids.length;i++){if(id==_ids[i]){_ids.splice(i,1);break}}};this.addEventListener=function(type,listener){if(typeof _listeners[type]==UNDEFINED){_listeners[type]=[]}_listeners[type].push(listener)};this.removeEventListener=function(type,listener){if(typeof _listeners[type]!=UNDEFINED){for(var i=0,l;l=_listeners[type][i];i++){if(l==listener){break}}_listeners[type].splice(i,1)}};this.dispatchEvent=function(event){if(this.hasEventListener(event.type)){event.target=this;for(var i=0,l;l=_listeners[event.type][i];i++){l(event)}return true}return false};this.hasEventListener=function(type){return(typeof _listeners[type]!=UNDEFINED&&_listeners[type].length>0)};this.getBaseURL=function(){var url=_l.href;if(url.indexOf("#")!=-1){url=url.substr(0,url.indexOf("#"))}if(url.substr(url.length-1)=="/"){url=url.substr(0,url.length-1)}return url};this.getStrict=function(){return _opts.strict};this.setStrict=function(strict){_opts.strict=strict};this.getHistory=function(){return _opts.history};this.setHistory=function(history){_opts.history=history};this.getTracker=function(){return _opts.tracker};this.setTracker=function(tracker){_opts.tracker=tracker};this.getTitle=function(){return _d.title};this.setTitle=function(title){if(!_supported){return null}if(typeof title==UNDEFINED){return}if(title=="null"){title=""}title=_dc(title);_st(function(){_title=_d.title=title;if(_juststart&&_iframe&&_iframe.contentWindow&&_iframe.contentWindow.document){_iframe.contentWindow.document.title=title;_juststart=false}if(!_justset&&_mozilla){_l.replace(_l.href.indexOf("#")!=-1?_l.href:_l.href+"#")}_justset=false},50)};this.getStatus=function(){return _t.status};this.setStatus=function(status){if(!_supported){return null}if(typeof status==UNDEFINED){return}if(status=="null"){status=""}status=_dc(status);if(!_safari){status=_strictCheck((status!="null")?status:"",true);if(status=="/"){status=""}if(!(/http(s)?:\/\//.test(status))){var index=_l.href.indexOf("#");status=(index==-1?_l.href:_l.href.substr(0,index))+"#"+status}_t.status=status}};this.resetStatus=function(){_t.status=""};this.getValue=function(){if(!_supported){return null}return _dc(_strictCheck(_ieLocal(_value,false),false))};this.setValue=function(value){if(!_supported){return null}if(typeof value==UNDEFINED){return}if(value=="null"){value=""}value=_ec(_dc(_strictCheck(value,true)));if(value=="/"){value=""}if(_value==value){return}_justset=true;_value=value;_silent=true;_update.call(SWFAddress);_stack[_h.length]=_value;if(_safari){if(_opts.history){_l[ID][_l.pathname]=_stack.toString();_length=_h.length+1;if(_version<418){if(_l.search==""){_form.action="#"+_value;_form.submit()}}else{if(_version<523||_value==""){var evt=_d.createEvent("MouseEvents");evt.initEvent("click",true,true);var anchor=_d.createElement("a");anchor.href="#"+_value;anchor.dispatchEvent(evt)}else{_l.hash="#"+_value}}}else{_l.replace("#"+_value)}}else{if(_value!=_getHash()){if(_opts.history){_l.hash="#"+_ieLocal(_value,true)}else{_l.replace("#"+_value)}}}if((_msie&&_version<8)&&_opts.history){_st(_htmlWrite,50)}if(_safari){_st(function(){_silent=false},1)}else{_silent=false}};this.getPath=function(){var value=this.getValue();var value=SWFAddress.getValue();if(value.indexOf("?")!=-1){return value.split("?")[0]}else{if(value.indexOf("#")!=-1){return value.split("#")[0]}else{return value}}};this.getPathNames=function(){var path=this.getPath();var names=path.split("/");if(path.substr(0,1)=="/"||path.length==0){names.splice(0,1)}if(path.substr(path.length-1,1)=="/"){names.splice(names.length-1,1)}return names};this.getQueryString=function(){var value=this.getValue();var index=value.indexOf("?");return(index!=-1&&index<value.length)?value.substr(index+1):""};this.getParameter=function(param){var value=this.getValue();var index=value.indexOf("?");if(index!=-1){value=value.substr(index+1);var params=value.split("&");var p,i=params.length;while(i--){p=params[i].split("=");if(p[0]==param){return p[1]}}}};this.getParameterNames=function(){var value=this.getValue();var index=value.indexOf("?");var names=[];if(index!=-1){value=value.substr(index+1);if(value!=""&&value.indexOf("=")!=-1){var params=value.split("&");var i=0;while(i<params.length){names.push(params[i].split("=")[0]);i++}}}return names};this.onInit=null;this.onChange=null;(function(){var _args;if(typeof FlashObject!=UNDEFINED){SWFObject=FlashObject}if(typeof SWFObject!=UNDEFINED&&SWFObject.prototype&&SWFObject.prototype.write){var _s1=SWFObject.prototype.write;SWFObject.prototype.write=function(){_args=arguments;if(this.getAttribute("version").major<8){this.addVariable("$swfaddress",SWFAddress.getValue());((typeof _args[0]=="string")?document.getElementById(_args[0]):_args[0]).so=this}var success;if(success=_s1.apply(this,_args)){_ref.addId(this.getAttribute("id"))}return success}}if(typeof swfobject!=UNDEFINED){var _s2r=swfobject.registerObject;swfobject.registerObject=function(){_args=arguments;_s2r.apply(this,_args);_ref.addId(_args[0])};var _s2c=swfobject.createSWF;swfobject.createSWF=function(){_args=arguments;_s2c.apply(this,_args);_ref.addId(_args[0].id)};var _s2e=swfobject.embedSWF;swfobject.embedSWF=function(){_args=arguments;if(typeof _args[8]==UNDEFINED){_args[8]={}}if(typeof _args[8].id==UNDEFINED){_args[8].id=_args[1]}_s2e.apply(this,_args);_ref.addId(_args[8].id)}}if(typeof UFO!=UNDEFINED){var _u=UFO.create;UFO.create=function(){_args=arguments;_u.apply(this,_args);_ref.addId(_args[0].id)}}if(typeof AC_FL_RunContent!=UNDEFINED){var _a=AC_FL_RunContent;AC_FL_RunContent=function(){_args=arguments;_a.apply(this,_args);for(var i=0,l=_args.length;i<l;i++){if(_args[i]=="id"){_ref.addId(_args[i+1])}}}}})()};

/**
*	swffit v2.3.1 (08/05/2009) <http://swffit.millermedeiros.com/>
*	Copyright (c) 2009 Miller Medeiros <http://www.millermedeiros.com/>
*	This software is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
*/
var swffit=function(){var win=window,doc=document,html=doc.getElementsByTagName("html")[0],AGENT=navigator.userAgent.toLowerCase(),WK=/webkit/.test(AGENT),IE=/msie/.test(AGENT)&&!win.opera,FF=/firefox/.test(AGENT)&&!win.opera,UNDEF="undefined",_ft,_re,_t,_mw,_mh,_xw,_xh,_hc,_vc,_ow,_oh;swfobject.createCSS("object","position:absolute");function fit(t,mw,mh,xw,xh,hc,vc){var mw=(mw)?mw:_ow,mh=(mh)?mh:_oh,xw=(xw)?xw:null,xh=(xh)?xh:null,hc=(hc||hc==null),vc=(vc||vc==null);configure({target:t,minWid:mw,minHei:mh,maxWid:xw,maxHei:xh,hCenter:hc,vCenter:vc});}function configure(o){var evalNum=function(v,p){return(typeof o[p]!=UNDEF)?o[p]:v;};_mw=evalNum(_mw,"minWid");_mh=evalNum(_mh,"minHei");_xw=evalNum(_xw,"maxWid");_xh=evalNum(_xh,"maxHei");var evalBool=function(v,p){return(o[p]||(v&&typeof o[p]==UNDEF));};_hc=evalBool(_hc,"hCenter");_vc=evalBool(_vc,"vCenter");if(o.target&&(o.target!=_t)){_t=o.target;swfobject.addDomLoadEvent(initFit);if(IE){swfobject.addLoadEvent(initFit);}}else{startFit();}}function initFit(){if(!html.style.overflowX){controlScroll(0,0);}if(!html.style.overflowY){controlScroll(0,1);}html.style.height=doc.body.style.height="100%";doc.body.style.margin=doc.body.style.padding=0;var st="width:100%; height:100%";st+=(IE)?"; overflow:hidden":"";swfobject.createCSS("#"+_t,st);_ft=doc.getElementById(_t);_ft=(_ft!=UNDEF&&FF&&/object/.test(_ft.innerHTML))?doc.getElementById(_t).getElementsByTagName("object")[0]:_ft;_ow=_ft.width;_oh=_ft.height;_mw=(_mw)?_mw:_ow;_mh=(_mh)?_mh:_oh;startFit();}function startFit(){setSize();if(!_re){swffit.addResizeEvent(setSize);_re=1;}}function stopFit(w,h){if(_re){swffit.removeResizeEvent(setSize);_re=0;setStyle("top","auto");setStyle("left","auto");setStyle("marginTop",0);setStyle("marginLeft",0);var w=(w)?w:"100%",h=(h)?h:"100%";setWidth(w);setHeight(h);forceRedraw();}}function forceRedraw(){if(WK){html.focus();}}function controlResizeEvent(a,fn){var p=(a)?["addEventListener","attachEvent"]:["removeEventListener","detachEvent"];if(win[p[0]]){win[p[0]]("resize",fn,false);}else{if(win[p[1]]){win[p[1]]("onresize",fn);}}}function setWidth(w){var v=(isNaN(w))?w:w+"px";setStyle("width",v);}function setHeight(h){var v=(isNaN(h))?h:h+"px";setStyle("height",v);}function setStyle(p,v){_ft.style[p]=v;}function setSize(){var iw=(win.innerWidth)?win.innerWidth:doc.body.clientWidth,ih=(win.innerHeight)?win.innerHeight:doc.body.clientHeight;iw-=(!IE&&ih<=_mh)?18:0;ih-=(!IE&&iw<=_mw)?18:0;if(_xw&&iw>=_xw){setWidth(_xw);setPosition(0,1);}else{if(iw>_mw&&(iw<_xw||!_xw)){setWidth("100%");}else{setWidth(_mw);}setPosition(0,0);}if(_xh&&ih>=_xh){setHeight(_xh);setPosition(1,1);}else{if(ih>_mh&&(ih<_xh||!_xh)){setHeight("100%");}else{setHeight(_mh);}setPosition(1,0);}forceRedraw();}function setPosition(t,x){var p,m;if(t){p=(x&&_vc)?"50%":"auto";m=(x&&_vc)?-(_xh*0.5)+"px":0;setStyle("top",p);setStyle("marginTop",m);}else{p=(x&&_hc)?"50%":"auto";m=(x&&_hc)?-(_xw*0.5)+"px":0;setStyle("left",p);setStyle("marginLeft",m);}}function controlScroll(s,v){var p=(v)?"overflowY":"overflowX";html.style[p]=(s)?"scroll":"auto";}function getValueOf(p){var o={target:_t,minWid:_mw,minHei:_mh,maxWid:_xw,maxHei:_xh,hCenter:_hc,vCenter:_vc};return o[p];}return{fit:fit,configure:configure,startFit:startFit,stopFit:stopFit,getValueOf:getValueOf,addResizeEvent:function(fn){controlResizeEvent(1,fn);},removeResizeEvent:function(fn){controlResizeEvent(0,fn);},showScrollH:function(){controlScroll(1,0);},showScrollV:function(){controlScroll(1,1);}};}();

// Script# Browser Compat Layer
// Copyright (c) 2007, Nikhil Kothari. All Rights Reserved.
// http://projects.nikhilk.net
//
function __loadCompatLayer(w){w.Debug=function(){};w.Debug._fail=function(message){throw new Error(message);};w.Debug.writeln=function(text){if(window.console){if(window.console.debug){window.console.debug(text);return;} else if(window.console.log){window.console.log(text);return;}} else if(window.opera&&window.opera.postError){window.opera.postError(text);return;}};w.__getNonTextNode=function(node){try{while(node&&(node.nodeType!=1)){node=node.parentNode;}} catch(ex){node=null;} return node;};w.__getLocation=function(e){var loc={x:0,y:0};while(e){loc.x+=e.offsetLeft;loc.y+=e.offsetTop;e=e.offsetParent;} return loc;};RegExp._cacheable=true;String._quoteSkipTest=true;w.navigate=function(url){window.setTimeout('window.location = "'+url+'";',0);};var attachEventProxy=function(eventName,eventHandler){eventHandler._mozillaEventHandler=function(e){window.event=e;eventHandler();if(!e.avoidReturn){return e.returnValue;}};this.addEventListener(eventName.slice(2),eventHandler._mozillaEventHandler,false);};var detachEventProxy=function(eventName,eventHandler){if(eventHandler._mozillaEventHandler){var mozillaEventHandler=eventHandler._mozillaEventHandler;delete eventHandler._mozillaEventHandler;this.removeEventListener(eventName.slice(2),mozillaEventHandler,false);}};w.attachEvent=attachEventProxy;w.detachEvent=detachEventProxy;w.HTMLDocument.prototype.attachEvent=attachEventProxy;w.HTMLDocument.prototype.detachEvent=detachEventProxy;w.HTMLElement.prototype.attachEvent=attachEventProxy;w.HTMLElement.prototype.detachEvent=detachEventProxy;w.Event.prototype.__defineGetter__('srcElement',function(){return __getNonTextNode(this.target)||this.currentTarget;});w.Event.prototype.__defineGetter__('cancelBubble',function(){return this._bubblingCanceled||false;});w.Event.prototype.__defineSetter__('cancelBubble',function(v){if(v){this._bubblingCanceled=true;this.stopPropagation();}});w.Event.prototype.__defineGetter__('returnValue',function(){return!this._cancelDefault;});w.Event.prototype.__defineSetter__('returnValue',function(v){if(!v){this._cancelDefault=true;this.preventDefault();}});w.Event.prototype.__defineGetter__('fromElement',function(){var n;if(this.type=='mouseover'){n=this.relatedTarget;} else if(this.type=='mouseout'){n=this.target;} return __getNonTextNode(n);});w.Event.prototype.__defineGetter__('toElement',function(){var n;if(this.type=='mouseout'){n=this.relatedTarget;} else if(this.type=='mouseover'){n=this.target;} return __getNonTextNode(n);});w.Event.prototype.__defineGetter__('button',function(){return(this.which==1)?1:(this.which==3)?2:0});w.Event.prototype.__defineGetter__('offsetX',function(){return window.pageXOffset+this.clientX-__getLocation(this.srcElement).x;});w.Event.prototype.__defineGetter__('offsetY',function(){return window.pageYOffset+this.clientY-__getLocation(this.srcElement).y;});w.HTMLElement.prototype.__defineGetter__('parentElement',function(){return this.parentNode;});w.HTMLElement.prototype.__defineGetter__('children',function(){var children=[];var childCount=this.childNodes.length;for(var i=0;i<childCount;i++){var childNode=this.childNodes[i];if(childNode.nodeType==1){children.push(childNode);}} return children;});w.HTMLElement.prototype.__defineGetter__('innerText',function(){try{return this.textContent} catch(ex){var text='';for(var i=0;i<this.childNodes.length;i++){if(this.childNodes[i].nodeType==3){text+=this.childNodes[i].textContent;}} return str;}});w.HTMLElement.prototype.__defineSetter__('innerText',function(v){var textNode=document.createTextNode(v);this.innerHTML='';this.appendChild(textNode);});w.HTMLElement.prototype.__defineGetter__('currentStyle',function(){return window.getComputedStyle(this,null);});w.HTMLElement.prototype.__defineGetter__('runtimeStyle',function(){return window.getOverrideStyle(this,null);});w.HTMLElement.prototype.removeNode=function(b){return this.parentNode.removeChild(this)};w.HTMLElement.prototype.contains=function(el){while(el!=null&&el!=this){el=el.parentNode;} return(el!=null)};w.HTMLStyleElement.prototype.__defineGetter__('styleSheet',function(){return this.sheet;});w.CSSStyleSheet.prototype.__defineGetter__('rules',function(){return this.cssRules;});w.CSSStyleSheet.prototype.addRule=function(selector,style,index){this.insertRule(selector+'{'+style+'}',index);};w.CSSStyleSheet.prototype.removeRule=function(index){this.deleteRule(index);};w.CSSStyleDeclaration.prototype.__defineGetter__('styleFloat',function(){return this.cssFloat;});w.CSSStyleDeclaration.prototype.__defineSetter__('styleFloat',function(v){this.cssFloat=v;});DocumentFragment.prototype.getElementById=function(id){var nodeQueue=[];var childNodes=this.childNodes;var node;var c;for(c=0;c<childNodes.length;c++){node=childNodes[c];if(node.nodeType==1){nodeQueue.push(node);}} while(nodeQueue.length){node=nodeQueue.dequeue();if(node.id==id){return node;} childNodes=node.childNodes;if(childNodes.length!=0){for(c=0;c<childNodes.length;c++){node=childNodes[c];if(node.nodeType==1){nodeQueue.push(node);}}}} return null;};DocumentFragment.prototype.getElementsByTagName=function(tagName){var elements=[];var nodeQueue=[];var childNodes=this.childNodes;var node;var c;for(c=0;c<childNodes.length;c++){node=childNodes[c];if(node.nodeType==1){nodeQueue.push(node);}} while(nodeQueue.length){node=nodeQueue.dequeue();if(node.tagName==tagName){elements.add(node);} childNodes=node.childNodes;if(childNodes.length!=0){for(c=0;c<childNodes.length;c++){node=childNodes[c];if(node.nodeType==1){nodeQueue.push(node);}}}} return elements;};DocumentFragment.prototype.createElement=function(tagName){return document.createElement(tagName);};var selectNodes=function(doc,path,contextNode){contextNode=contextNode?contextNode:doc;var xpath=new XPathEvaluator();var result=xpath.evaluate(path,contextNode,doc.createNSResolver(doc.documentElement),XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);var nodeList=new Array(result.snapshotLength);for(var i=0;i<result.snapshotLength;i++){nodeList[i]=result.snapshotItem(i);} return nodeList;};var selectSingleNode=function(doc,path,contextNode){path+='[1]';var nodes=selectNodes(doc,path,contextNode);if(nodes.length!=0){for(var i=0;i<nodes.length;i++){if(nodes[i]){return nodes[i];}}} return null;};w.XMLDocument.prototype.selectNodes=function(path,contextNode){return selectNodes(this,path,contextNode);};w.XMLDocument.prototype.selectSingleNode=function(path,contextNode){return selectSingleNode(this,path,contextNode);};w.XMLDocument.prototype.transformNode=function(xsl){var xslProcessor=new XSLTProcessor();xslProcessor.importStylesheet(xsl);var ownerDocument=document.implementation.createDocument("","",null);var transformedDoc=xslProcessor.transformToDocument(this);return transformedDoc.xml;};Node.prototype.selectNodes=function(path){var doc=this.ownerDocument;return doc.selectNodes(path,this);};Node.prototype.selectSingleNode=function(path){var doc=this.ownerDocument;return doc.selectSingleNode(path,this);};Node.prototype.__defineGetter__('baseName',function(){return this.localName;});Node.prototype.__defineGetter__('text',function(){return this.textContent;});Node.prototype.__defineSetter__('text',function(value){this.textContent=value;});Node.prototype.__defineGetter__('xml',function(){return(new XMLSerializer()).serializeToString(this);});}
function __supportsCompatLayer(ua){return(ua.indexOf('Gecko')>=0)||(ua.indexOf('AppleWebKit')>=0)||(ua.indexOf('Opera')>=0);}
if(__supportsCompatLayer(window.navigator.userAgent)){try{__loadCompatLayer(window);} catch(e){}}

// Script# Core Runtime
// Copyright (c) 2007, Nikhil Kothari. All Rights Reserved.
// http://projects.nikhilk.net
//
function isUndefined(o){return(o===undefined);}
function isNull(o){return(o===null);}
function isNullOrUndefined(o){return(o===null)||(o===undefined);}
window.__scriptsharp='0.5.1.0';function $(id){return document.getElementById(id);}
document.getElementsBySelector=function(cssSelector,root){var all=root?root.getElementsByTagName('*'):document.getElementsByTagName('*');var matches=[];var styleSheet=document.getElementsBySelector.styleSheet;if(!styleSheet){var styleSheetNode=document.createElement('style');styleSheetNode.type='text/css';document.getElementsByTagName('head')[0].appendChild(styleSheetNode);styleSheet=styleSheetNode.styleSheet||styleSheetNode.sheet;document.getElementsBySelector.styleSheet=styleSheet;} if(window.navigator.userAgent.indexOf('MSIE')>=0){styleSheet.addRule(cssSelector,'ssCssMatch:true',0);for(var i=all.length-1;i>=0;i--){var element=all[i];if(element.currentStyle.ssCssMatch){matches[matches.length]=element;}} styleSheet.removeRule(0);} else{var matchValue=document.getElementsBySelector.matchValue;if(!matchValue){matchValue=(window.navigator.userAgent.indexOf('Opera')>=0)?'"ssCssMatch"':'ssCssMatch 1';document.getElementsBySelector.matchValue=matchValue;} styleSheet.insertRule(cssSelector+' { counter-increment: ssCssMatch }',0);var docView=document.defaultView;for(var i=all.length-1;i>=0;i--){var element=all[i];if(docView.getComputedStyle(element,null).counterIncrement===matchValue){matches[matches.length]=element;}} styleSheet.deleteRule(0);} if(matches.length>1){matches.reverse();} return matches;}
Object.__typeName='Object';Object.__baseType=null;Object.parse=function(s){return eval(s);}
Object.getKeyCount=function(d){var count=0;for(var n in d){count++;} return count;}
Object.clearKeys=function(d){for(var n in d){delete d[n];}}
Object.keyExists=function(d,key){return d[key]!==undefined;}
Function.parse=function(s){if(!Function._parseCache){Function._parseCache={};} var fn=Function._parseCache[s];if(!fn){try{eval('fn = '+s);if(typeof(fn)!='function'){fn=null;} else{Function._parseCache[s]=fn;}} catch(ex){}} return fn;}
Function.prototype.invoke=function(){this.apply(null,arguments);}
Boolean.__typeName='Boolean';Boolean.parse=function(s){return(s.toLowerCase()=='true');}
Number.__typeName='Number';Number.parse=function(s){if(!s||!s.length){return 0;} if((s.indexOf('.')>=0)||(s.indexOf('e')>=0)||s.endsWith('f')||s.endsWith('F')){return parseFloat(s);} return parseInt(s);}
/*Number.prototype.format=function(format,useLocale){if(isNullOrUndefined(format)||(format.length==0)||(format=='i')){if(useLocale){return this.toLocaleString();} else{return this.toString();}} return this._netFormat(format,useLocale);}*/
Number._commaFormat=function(number,groups,decimal,comma){var decimalPart=null;var decimalIndex=number.indexOf(decimal);if(decimalIndex>0){decimalPart=number.substr(decimalIndex);number=number.substr(0,decimalIndex);} var negative=number.startsWith('-');if(negative){number=number.substr(1);} var groupIndex=0;var groupSize=groups[groupIndex];if(number.length<groupSize){return decimalPart?number+decimalPart:number;} var index=number.length;var s='';var done=false;while(!done){var length=groupSize;var startIndex=index-length;if(startIndex<0){groupSize+=startIndex;length+=startIndex;startIndex=0;done=true;} if(!length){break;} var part=number.substr(startIndex,length);if(s.length){s=part+comma+s;} else{s=part;} index-=length;if(groupIndex<groups.length-1){groupIndex++;groupSize=groups[groupIndex];}} if(negative){s='-'+s;} return decimalPart?s+decimalPart:s;}
Number.prototype._netFormat=function(format,useLocale){var nf=useLocale?CultureInfo.Current.numberFormat:CultureInfo.Neutral.numberFormat;var s='';var precision=-1;if(format.length>1){precision=parseInt(format.substr(1));} var fs=format.charAt(0);switch(fs){case'd':case'D':s=parseInt(Math.abs(this)).toString();if(precision!=-1){s=s.padLeft(precision,'0');} if(this<0){s='-'+s;} break;case'x':case'X':s=parseInt(Math.abs(this)).toString(16);if(fs=='X'){s=s.toUpperCase();} if(precision!=-1){s=s.padLeft(precision,'0');} break;case'e':case'E':if(precision==-1){s=this.toExponential();} else{s=this.toExponential(precision);} if(fs=='E'){s=s.toUpperCase();} break;case'f':case'F':case'n':case'N':if(precision==-1){precision=nf.numberDecimalDigits;} s=this.toFixed(precision).toString();if(precision&&(nf.numberDecimalSeparator!='.')){var index=s.indexOf('.');s=s.substr(0,index)+nf.numberDecimalSeparator+s.substr(index+1);} if((fs=='n')||(fs=='N')){s=Number._commaFormat(s,nf.numberGroupSizes,nf.numberDecimalSeparator,nf.numberGroupSeparator);} break;case'c':case'C':if(precision==-1){precision=nf.currencyDecimalDigits;} s=Math.abs(this).toFixed(precision).toString();if(precision&&(nf.currencyDecimalSeparator!='.')){var index=s.indexOf('.');s=s.substr(0,index)+nf.currencyDecimalSeparator+s.substr(index+1);} s=Number._commaFormat(s,nf.currencyGroupSizes,nf.currencyDecimalSeparator,nf.currencyGroupSeparator);if(this<0){s=String.format(nf.currencyNegativePattern,s);} else{s=String.format(nf.currencyPositivePattern,s);} break;case'p':case'P':if(precision==-1){precision=nf.percentDecimalDigits;} s=(Math.abs(this)*100.0).toFixed(precision).toString();if(precision&&(nf.percentDecimalSeparator!='.')){var index=s.indexOf('.');s=s.substr(0,index)+nf.percentDecimalSeparator+s.substr(index+1);} s=Number._commaFormat(s,nf.percentGroupSizes,nf.percentDecimalSeparator,nf.percentGroupSeparator);if(this<0){s=String.format(nf.percentNegativePattern,s);} else{s=String.format(nf.percentPositivePattern,s);} break;} return s;}
Math.truncate=function(n){return(n>=0)?Math.floor(n):Math.ceil(n);}
String.__typeName='String';String.Empty='';String.compare=function(s1,s2,ignoreCase){if(ignoreCase){if(s1){s1=s1.toUpperCase();} if(s2){s2=s2.toUpperCase();}} s1=s1||'';s2=s2||'';if(s1==s2){return 0;} if(s1<s2){return-1;} return 1;}
String.prototype.compareTo=function(s,ignoreCase){return String.compare(this,s,ignoreCase);}
String.prototype.endsWith=function(suffix){if(!suffix.length){return true;} if(suffix.length>this.length){return false;} return(this.substr(this.length-suffix.length)==suffix);}
String.equals=function(s1,s2,ignoreCase){return String.compare(s1,s2,ignoreCase)==0;}
String._format=function(format,values,useLocale){if(!String._formatRE){String._formatRE=/(\{[^\}^\{]+\})/g;} return format.replace(String._formatRE,function(str,m){var index=parseInt(m.substr(1));var value=values[index+1];if(isNullOrUndefined(value)){return'';} if(value.format){var formatSpec=null;var formatIndex=m.indexOf(':');if(formatIndex>0){formatSpec=m.substring(formatIndex+1,m.length-1);} return value.format.call(value,formatSpec,useLocale);} else{if(useLocale){return value.toLocaleString();} return value.toString();}});}
String.format=function(format){return String._format(format,arguments,false);}
String.fromChar=function(ch,count){var s=ch;for(var i=1;i<count;i++){s+=ch;} return s;}
String.prototype.htmlDecode=function(){if(!String._htmlDecRE){String._htmlDecMap={'&amp;':'&','&lt;':'<','&gt;':'>','&quot;':'"'};String._htmlDecRE=/(&amp;|&lt;|&gt;|&quot;)/gi;} var s=this;s=s.replace(String._htmlDecRE,function(str,m){return String._htmlDecMap[m];});return s;}
String.prototype.htmlEncode=function(){if(!String._htmlEncRE){String._htmlEncMap={'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'};String._htmlEncRE=/([&<>"])/g;} var s=this;if(String._htmlEncRE.test(s)){s=s.replace(String._htmlEncRE,function(str,m){return String._htmlEncMap[m];});} return s;}
String.prototype.indexOfAny=function(chars,startIndex,count){var length=this.length;if(!length){return-1;} startIndex=startIndex||0;count=count||length;var endIndex=startIndex+count-1;if(endIndex>=length){endIndex=length-1;} for(var i=startIndex;i<=endIndex;i++){if(chars.indexOf(this.charAt(i))>=0){return i;}} return-1;}
String.prototype.insert=function(index,value){if(!value){return this;} if(!index){return value+this;} var s1=this.substr(0,index);var s2=this.substr(index);return s1+value+s2;}
String.isNullOrEmpty=function(s){return!s||!s.length;}
String.prototype.lastIndexOfAny=function(chars,startIndex,count){var length=this.length;if(!length){return-1;} startIndex=startIndex||length-1;count=count||length;var endIndex=startIndex-count+1;if(endIndex<0){endIndex=0;} for(var i=startIndex;i>=endIndex;i--){if(chars.indexOf(this.charAt(i))>=0){return i;}} return-1;}
String.localeFormat=function(format){return String._format(format,arguments,true);}
String.prototype.padLeft=function(totalWidth,ch){if(this.length<totalWidth){ch=ch||' ';return String.fromChar(ch,totalWidth-this.length)+this;} return this;}
String.prototype.padRight=function(totalWidth,ch){if(this.length<totalWidth){ch=ch||' ';return this+String.fromChar(ch,totalWidth-this.length);} return this;}
String.prototype.quote=function(){if(!String._quoteMap){String._quoteMap={'\\':'\\\\','\'':'\\\'','"':'\\"','\r':'\\r','\n':'\\n','\t':'\\t','\f':'\\f','\b':'\\b'};} if(!String._quoteRE||!RegExp._cacheable){String._quoteRE=new RegExp("([\'\"\\\\\x00-\x1F\x7F-\uFFFF])","g");} var s=this;if(String._quoteSkipTest||String._quoteRE.test(s)){s=this.replace(String._quoteRE,function(str,m){var c=String._quoteMap[m];if(c){return c;} c=m.charCodeAt(0);return'\\u'+c.toString(16).toUpperCase().padLeft(4,'0');});} return'"'+s+'"';}
String.prototype.remove=function(index,count){if(!count||((index+count)>this.length)){return this.substr(0,index);} return this.substr(0,index)+this.substr(index+count);}
String.prototype._replace=String.prototype.replace;String.prototype.replace=function(oldValue,newValue){if(oldValue.constructor==String){newValue=newValue||'';return this.split(oldValue).join(newValue);} return String.prototype._replace.call(this,oldValue,newValue);}
String.prototype.startsWith=function(prefix){if(!prefix.length){return true;} if(prefix.length>this.length){return false;} return(this.substr(0,prefix.length)==prefix);}
String.prototype.trim=function(){return this.trimEnd().trimStart();}
String.prototype.trimEnd=function(){return this.replace(/\s*$/,'');}
String.prototype.trimStart=function(){return this.replace(/^\s*/,'');}
String.prototype.unquote=function(){return eval('('+this+')');}
Array.__typeName='Array';Array.prototype.add=function(item){this[this.length]=item;}
Array.prototype.addRange=function(items){if(!items){return;} var length=items.length;for(var index=0;index<length;index++){this[this.length]=items[index];}}
Array.prototype.aggregate=function(seed,callback){var length=this.length;for(var index=0;index<length;index++){seed=callback(seed,this[index],index,this);} return seed;}
Array.prototype.clear=function(){if(this.length>0){this.splice(0,this.length);}}
Array.prototype.clone=function(){var length=this.length;var array=new Array(length);for(var index=0;index<length;index++){array[index]=this[index];} return array;}
Array.prototype.contains=function(item){var index=this.indexOf(item);return(index>=0);}
Array.prototype.dequeue=function(){return this.shift();}
Array.prototype.enqueue=function(item){this._queue=true;this.push(item);}
Array.prototype.peek=function(){if(this.length){var index=this._queue?0:this.length-1;return this[index];} return null;}
if(!Array.prototype.every){Array.prototype.every=function(callback){for(var i=this.length-1;i>=0;i--){if(!callback(this[i],i,this)){return false;}} return true;}}
Array.prototype.extract=function(index,count){if(!count){return this.slice(index);} return this.slice(index,index+count);}
if(!Array.prototype.filter){Array.prototype.filter=function(callback){var filtered=[];for(var i=0;i<this.length;i++){if(callback(this[i],i,this)){filtered.add(this[i]);}} return filtered;}}
if(!Array.prototype.forEach){Array.prototype.forEach=function(callback){for(var i=0;i<this.length;i++){callback(this[i],i,this);}}}
Array.prototype.groupBy=function(callback){var length=this.length;var groups=[];var keys={};for(var index=0;index<length;index++){var key=callback(this[index],index);if(String.isNullOrEmpty(key)){continue;} var items=keys[key];if(!items){items=[];items.key=key;keys[key]=items;groups.add(items);} items.add(this[index]);} return groups;}
Array.prototype.index=function(callback){var length=this.length;var items={};for(var index=0;index<length;index++){var key=callback(this[index],index);if(String.isNullOrEmpty(key)){continue;} items[key]=this[index];} return items;}
Array.prototype.indexOf=function(item){var length=this.length;if(length){for(var index=0;index<length;index++){if(this[index]===item){return index;}}} return-1;}
Array.prototype.insert=function(index,item){this.splice(index,0,item);}
Array.prototype.insertRange=function(index,items){this.splice(index,0,items);}
if(!Array.prototype.map){Array.prototype.map=function(callback){var mapped=new Array(this.length);for(var i=this.length-1;i>=0;i--){mapped[i]=callback(this[i],i,this);} return mapped;}}
Array.parse=function(s){return eval('('+s+')');}
Array.prototype.remove=function(item){var index=this.indexOf(item);if(index>=0){this.splice(index,1);return true;} return false;}
Array.prototype.removeAt=function(index){return this.splice(index,1)[0];}
Array.prototype.removeRange=function(index,count){return this.splice(index,count);}
if(!Array.prototype.some){Array.prototype.some=function(callback){for(var i=this.length-1;i>=0;i--){if(callback(this[i],i,this)){return true;}} return false;}}
RegExp.__typeName='RegExp';RegExp.parse=function(s){if(s.startsWith('/')){var endSlashIndex=s.lastIndexOf('/');if(endSlashIndex>1){var expression=s.substring(1,endSlashIndex);var flags=s.substr(endSlashIndex+1);return new RegExp(expression,flags);}} return null;}
Date.__typeName='Date';Date.get_now=function(){return new Date();}
Date.get_today=function(){var d=new Date();return new Date(d.getFullYear(),d.getMonth(),d.getDate());}
Date.prototype.format=function(format,useLocale){if(isNullOrUndefined(format)||(format.length==0)||(format=='i')){if(useLocale){return this.toLocaleString();} else{return this.toString();}} if(format=='id'){if(useLocale){return this.toLocaleDateString();} else{return this.toDateString();}} if(format=='it'){if(useLocale){return this.toLocaleTimeString();} else{return this.toTimeString();}} return this._netFormat(format,useLocale);}
Date.prototype._netFormat=function(format,useLocale){var dtf=useLocale?CultureInfo.Current.dateFormat:CultureInfo.Neutral.dateFormat;var useUTC=false;if(format.length==1){switch(format){case'f':format=dtf.longDatePattern+' '+dtf.shortTimePattern;case'F':format=dtf.dateTimePattern;break;case'd':format=dtf.shortDatePattern;break;case'D':format=dtf.longDatePattern;break;case't':format=dtf.shortTimePattern;break;case'T':format=dtf.longTimePattern;break;case'g':format=dtf.shortDatePattern+' '+dtf.shortTimePattern;break;case'G':format=dtf.shortDatePattern+' '+dtf.longTimePattern;break;case'R':case'r':format=dtf.gmtDateTimePattern;useUTC=true;break;case'u':format=dtf.universalDateTimePattern;useUTC=true;break;case'U':format=dtf.dateTimePattern;useUTC=true;break;case's':format=dtf.sortableDateTimePattern;break;}} if(format.charAt(0)=='%'){format=format.substr(1);} if(!Date._formatRE){Date._formatRE=/dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|hh|h|HH|H|mm|m|ss|s|tt|t|fff|ff|f|zzz|zz|z/g;} var re=Date._formatRE;var sb=new StringBuilder();var dt=this;if(useUTC){dt=new Date(Date.UTC(dt.getUTCFullYear(),dt.getUTCMonth(),dt.getUTCDate(),dt.getUTCHours(),dt.getUTCMinutes(),dt.getUTCSeconds(),dt.getUTCMilliseconds()));} re.lastIndex=0;while(true){var index=re.lastIndex;var match=re.exec(format);sb.append(format.slice(index,match?match.index:format.length));if(!match){break;} var fs=match[0];var part=fs;switch(fs){case'dddd':part=dtf.dayNames[dt.getDay()];break;case'ddd':part=dtf.shortDayNames[dt.getDay()];break;case'dd':part=dt.getDate().toString().padLeft(2,'0');break;case'd':part=dt.getDate();break;case'MMMM':part=dtf.monthNames[dt.getMonth()];break;case'MMM':part=dtf.shortMonthNames[dt.getMonth()];break;case'MM':part=(dt.getMonth()+1).toString().padLeft(2,'0');break;case'M':part=(dt.getMonth()+1);break;case'yyyy':part=dt.getFullYear();break;case'yy':part=(dt.getFullYear()%100).toString().padLeft(2,'0');break;case'y':part=(dt.getFullYear()%100);break;case'h':case'hh':part=dt.getHours()%12;if(!part){part='12';} else if(fs=='hh'){part=part.toString().padLeft(2,'0');} break;case'HH':part=dt.getHours().toString().padLeft(2,'0');break;case'H':part=dt.getHours();break;case'mm':part=dt.getMinutes().toString().padLeft(2,'0');break;case'm':part=dt.getMinutes();break;case'ss':part=dt.getSeconds().toString().padLeft(2,'0');break;case's':part=dt.getSeconds();break;case't':case'tt':part=(dt.getHours()<12)?dtf.amDesignator:dtf.pmDesignator;if(fs=='t'){part=part.charAt(0);} break;case'fff':part=dt.getMilliseconds().toString().padLeft(3,'0');break;case'ff':part=dt.getMilliseconds().toString().padLeft(3).substr(0,2);break;case'f':part=dt.getMilliseconds().toString().padLeft(3).charAt(0);break;case'z':part=dt.getTimezoneOffset()/60;part=((part>=0)?'-':'+')+Math.floor(Math.abs(part));break;case'zz':case'zzz':part=dt.getTimezoneOffset()/60;part=((part>=0)?'-':'+')+Math.floor(Math.abs(part)).toString().padLeft(2,'0');if(fs=='zzz'){part+=dtf.timeSeparator+Math.abs(dt.getTimezoneOffset()%60).toString().padLeft(2,'0');} break;} sb.append(part);} return sb.toString();}
Date._parse=Date.parse;Date.parse=function(s){return new Date(Date._parse(s));}
Error.__typeName='Error';Error.create=function(message,userData,innerException){var e=new Error(message);if(userData){e.userData=userData;} if(innerException){e.innerException=innerException;} return e;}
if(!Debug._fail){Debug._fail=function(message){Debug.writeln(message);eval('debugger;');}}
Debug.assert=function(condition,message){if(!condition){message='Assert failed: '+message;if(confirm(message+'\r\n\r\nBreak into debugger?')){Debug._fail(message);}}}
Debug._dumpCore=function(sb,object,name,indentation,dumpedObjects){if(object===null){sb.appendLine(indentation+name+': null');return;} switch(typeof(object)){case'undefined':sb.appendLine(indentation+name+': undefined');break;case'number':case'string':case'boolean':sb.appendLine(indentation+name+': '+object);break;default:if(Date.isInstance(object)||RegExp.isInstance(object)){sb.appendLine(indentation+name+': '+object);break;} if(dumpedObjects.contains(object)){sb.appendLine(indentation+name+': ...');break;} dumpedObjects.add(object);var type=Type.getInstanceType(object);var typeName=type.get_fullName();var recursiveIndentation=indentation+'  ';if(IArray.isInstance(object)){sb.appendLine(indentation+name+': {'+typeName+'}');var length=object.getLength();for(var i=0;i<length;i++){Debug._dumpCore(sb,object.getItem(i),'['+i+']',recursiveIndentation,dumpedObjects);}} else{if(object.tagName){sb.appendLine(indentation+name+': <'+object.tagName+'>');var attributes=object.attributes;for(var i=0;i<attributes.length;i++){var attrValue=attributes[i].nodeValue;if(attrValue){Debug._dumpCore(sb,attrValue,attributes[i].nodeName,recursiveIndentation,dumpedObjects);}}} else{sb.appendLine(indentation+name+': {'+typeName+'}');for(var field in object){var v=object[field];if(!Function.isInstance(v)){Debug._dumpCore(sb,v,field,recursiveIndentation,dumpedObjects);}}}} dumpedObjects.remove(object);break;}}
Debug.dump=function(object,name){if((!name||!name.length)&&(object!==null)){name=Type.getInstanceType(object).get_fullName();} if(!name||!name.length){return;} var sb=new StringBuilder();Debug._dumpCore(sb,object,name,'',[]);Debug.writeLine(sb.toString());}
Debug.fail=function(message){Debug._fail(message);}
Debug.inspect=function(object,name){var dumped=false;if(window.debugService){dumped=window.debugService.inspect(name,object);} if(!dumped){Debug.dump(object,name);}}
Debug.writeLine=function(message){if(window.debugService){window.debugService.trace(message);return;} Debug.writeln(message);var traceTextBox=$('_traceTextBox');if(traceTextBox){traceTextBox.value=traceTextBox.value+'\r\n'+message;}}
Debug.__typeName='Debug';var Type=Function;Type.__typeName='Type';var __Namespace=function(name){this.__typeName=name;}
__Namespace.prototype={__namespace:true,getName:function(){return this.__typeName;}}
Type.createNamespace=function(name){if(!window.__namespaces){window.__namespaces={};} if(!window.__rootNamespaces){window.__rootNamespaces=[];} if(window.__namespaces[name]){return;} var ns=window;var nameParts=name.split('.');for(var i=0;i<nameParts.length;i++){var part=nameParts[i];var nso=ns[part];if(!nso){ns[part]=nso=new __Namespace(nameParts.slice(0,i+1).join('.'));if(i==0){window.__rootNamespaces.add(nso);}} ns=nso;} window.__namespaces[name]=ns;}
Type.prototype.createClass=function(name,baseType,interfaceType){this.prototype.constructor=this;this.__typeName=name;this.__class=true;this.__baseType=baseType||Object;if(baseType){this.__basePrototypePending=true;} if(interfaceType){this.__interfaces=[];for(var i=2;i<arguments.length;i++){interfaceType=arguments[i];this.__interfaces.add(interfaceType);}}}
Type.prototype.createInterface=function(name){this.__typeName=name;this.__interface=true;}
Type.prototype.createEnum=function(name,flags){for(var field in this.prototype){this[field]=this.prototype[field];} this.__typeName=name;this.__enum=true;if(flags){this.__flags=true;}}
Type.prototype.setupBase=function(){if(this.__basePrototypePending){var baseType=this.__baseType;if(baseType.__basePrototypePending){baseType.setupBase();} for(var memberName in baseType.prototype){var memberValue=baseType.prototype[memberName];if(!this.prototype[memberName]){this.prototype[memberName]=memberValue;}} delete this.__basePrototypePending;}}
if(!Type.prototype.resolveInheritance){Type.prototype.resolveInheritance=Type.prototype.setupBase;}
Type.prototype.constructBase=function(instance,args){if(this.__basePrototypePending){this.setupBase();} if(!args){this.__baseType.apply(instance);} else{this.__baseType.apply(instance,args);}}
Type.prototype.callBase=function(instance,name,args){var baseMethod=this.__baseType.prototype[name];if(!args){return baseMethod.apply(instance);} else{return baseMethod.apply(instance,args);}}
Type.prototype.get_baseType=function(){return this.__baseType||null;}
Type.prototype.get_fullName=function(){return this.__typeName;}
Type.prototype.get_name=function(){var fullName=this.__typeName;var nsIndex=fullName.lastIndexOf('.');if(nsIndex>0){return fullName.substr(nsIndex+1);} return fullName;}
Type.prototype.isInstance=function(instance){if(isNullOrUndefined(instance)){return false;} if((this==Object)||(instance instanceof this)){return true;} var type=Type.getInstanceType(instance);return this.isAssignableFrom(type);}
Type.prototype.isAssignableFrom=function(type){if((this==Object)||(this==type)){return true;} if(this.__class){var baseType=type.__baseType;while(baseType){if(this==baseType){return true;} baseType=baseType.__baseType;}} else if(this.__interface){var interfaces=type.__interfaces;if(interfaces&&interfaces.contains(this)){return true;} var baseType=type.__baseType;while(baseType){interfaces=baseType.__interfaces;if(interfaces&&interfaces.contains(this)){return true;} baseType=baseType.__baseType;}} return false;}
Type.isClass=function(type){return(type.__class==true);}
Type.isEnum=function(type){return(type.__enum==true);}
Type.isFlagsEnum=function(type){return((type.__enum==true)&&(type.__flags==true));}
Type.isInterface=function(type){return(type.__interface==true);}
Type.canCast=function(instance,type){return type.isInstance(instance);}
Type.safeCast=function(instance,type){if(type.isInstance(instance)){return instance;} return null;}
Type.getInstanceType=function(instance){var ctor=null;try{ctor=instance.constructor;} catch(ex){} if(!ctor||!ctor.__typeName){ctor=Object;} return ctor;}
Type.getType=function(typeName){if(!typeName){return null;} if(!Type.__typeCache){Type.__typeCache={};} var type=Type.__typeCache[typeName];if(!type){type=eval(typeName);Type.__typeCache[typeName]=type;} return type;}
Type.parse=function(typeName){return Type.getType(typeName);}
var Enum=function(){}
Enum.createClass('Enum');Enum.parse=function(enumType,s){var values=enumType.prototype;if(!enumType.__flags){for(var f in values){if(f===s){return values[f];}}} else{var parts=s.split('|');var value=0;var parsed=true;for(var i=parts.length-1;i>=0;i--){var part=parts[i].trim();var found=false;for(var f in values){if(f===part){value|=values[f];found=true;break;}} if(!found){parsed=false;break;}} if(parsed){return value;}} throw'Invalid Enumeration Value';}
Enum.toString=function(enumType,value){var values=enumType.prototype;if(!enumType.__flags||(value===0)){for(var i in values){if(values[i]===value){return i;}} throw'Invalid Enumeration Value';} else{var parts=[];for(var i in values){if(values[i]&value){if(parts.length){parts.add(' | ');} parts.add(i);}} if(!parts.length){throw'Invalid Enumeration Value';} return parts.join('');}}
var Delegate=function(){}
Delegate.createClass('Delegate');Delegate.Null=function(){}
Delegate._create=function(targets){var delegate=function(){if(targets.length==2){return targets[1].apply(targets[0],arguments);} else{for(var i=0;i<targets.length;i+=2){targets[i+1].apply(targets[i],arguments);} return null;}};delegate.invoke=delegate;delegate._targets=targets;return delegate;}
Delegate.create=function(object,method){if(!object){method.invoke=method;return method;} return Delegate._create([object,method]);}
Delegate.combine=function(delegate1,delegate2){if(!delegate1){if(!delegate2._targets){return Delegate.create(null,delegate2);} return delegate2;} if(!delegate2){if(!delegate1._targets){return Delegate.create(null,delegate1);} return delegate1;} var targets1=delegate1._targets?delegate1._targets:[null,delegate1];var targets2=delegate2._targets?delegate2._targets:[null,delegate2];return Delegate._create(targets1.concat(targets2));}
Delegate.remove=function(delegate1,delegate2){if(!delegate1||(delegate1===delegate2)){return null;} if(!delegate2){return delegate1;} var targets=delegate1._targets;var object=null;var method;if(delegate2._targets){object=delegate2._targets[0];method=delegate2._targets[1];} else{method=delegate2;} for(var i=0;i<targets.length;i+=2){if((targets[i]===object)&&(targets[i+1]===method)){if(targets.length==2){return null;} targets.splice(i,2);return Delegate._create(targets);}} return delegate1;}
Delegate.createExport=function(delegate,multiUse){var name='__'+(new Date()).valueOf();Delegate[name]=function(){if(!multiUse){Delegate.deleteExport(name);} delegate.apply(null,arguments);};return name;}
Delegate.deleteExport=function(name){if(Delegate[name]){delete Delegate[name];}}
Delegate.clearExport=function(name){if(Delegate[name]){Delegate[name]=Delegate.Null;}}
var CultureInfo=function(name,numberFormat,dateFormat){this.name=name;this.numberFormat=numberFormat;this.dateFormat=dateFormat;}
CultureInfo.createClass('CultureInfo');CultureInfo.Neutral=new CultureInfo('en-US',{naNSymbol:'NaN',negativeSign:'-',positiveSign:'+',negativeInfinityText:'-Infinity',positiveInfinityText:'Infinity',percentSymbol:'%',percentGroupSizes:[3],percentDecimalDigits:2,percentDecimalSeparator:'.',percentGroupSeparator:',',percentPositivePattern:'{0} %',percentNegativePattern:'-{0} %',currencySymbol:'$',currencyGroupSizes:[3],currencyDecimalDigits:2,currencyDecimalSeparator:'.',currencyGroupSeparator:',',currencyNegativePattern:'(${0})',currencyPositivePattern:'${0}',numberGroupSizes:[3],numberDecimalDigits:2,numberDecimalSeparator:'.',numberGroupSeparator:','},{amDesignator:'AM',pmDesignator:'PM',dateSeparator:'/',timeSeparator:':',gmtDateTimePattern:'ddd, dd MMM yyyy HH:mm:ss \'GMT\'',universalDateTimePattern:'yyyy-MM-dd HH:mm:ssZ',sortableDateTimePattern:'yyyy-MM-ddTHH:mm:ss',dateTimePattern:'dddd, MMMM dd, yyyy h:mm:ss tt',longDatePattern:'dddd, MMMM dd, yyyy',shortDatePattern:'M/d/yyyy',longTimePattern:'h:mm:ss tt',shortTimePattern:'h:mm tt',firstDayOfWeek:0,dayNames:['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],shortDayNames:['Sun','Mon','Tue','Wed','Thu','Fri','Sat'],minimizedDayNames:['Su','Mo','Tu','We','Th','Fr','Sa'],monthNames:['January','February','March','April','May','June','July','August','September','October','November','December',''],shortMonthNames:['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec','']});CultureInfo.Current=CultureInfo.Neutral;var IArray=function(){};IArray.createInterface('IArray');var IEnumerator=function(){};IEnumerator.createInterface('IEnumerator');var IEnumerable=function(){};IEnumerable.createInterface('IEnumerable');var ArrayEnumerator=function(array){this._array=array;this._index=-1;}
ArrayEnumerator.prototype={get_current:function(){return this._array[this._index];},moveNext:function(){this._index++;return(this._index<this._array.length);},reset:function(){this._index=-1;}}
ArrayEnumerator.createClass('ArrayEnumerator',null,IEnumerator);Array.__interfaces=[IArray,IEnumerable];Array.prototype.getLength=function(){return this.length;}
Array.prototype.getItem=function(index){return this[index];}
Array.prototype.getEnumerator=function(){return new ArrayEnumerator(this);}
var IDisposable=function(){};IDisposable.createInterface('IDisposable');var IServiceProvider=function(){};IServiceProvider.createInterface('IServiceProvider');var IServiceContainer=function(){};IServiceContainer.createInterface('IServiceContainer');var StringBuilder=function(s){if((s!==undefined)&&(s!==null)){this._parts=[s];} else{this._parts=[];}}
StringBuilder.prototype={get_isEmpty:function(){return(this._parts.length==0);},append:function(s){if((s!==undefined)&&(s!==null)){this._parts.add(s);}},appendLine:function(s){this.append(s);this.append('\r\n');},clear:function(){this._parts.clear();},toString:function(){return this._parts.join('');}};StringBuilder.createClass('StringBuilder');var EventArgs=function(){}
EventArgs.createClass('EventArgs');EventArgs.Empty=new EventArgs();if(!window.XMLHttpRequest){window.XMLHttpRequest=function(){var progIDs=['Msxml2.XMLHTTP','Microsoft.XMLHTTP'];for(var i=0;i<progIDs.length;i++){try{var xmlHttp=new ActiveXObject(progIDs[i]);return xmlHttp;} catch(ex){}} return null;}}
var XMLDocumentParser=function(){}
XMLDocumentParser.createClass('XMLDocumentParser');XMLDocumentParser.parse=function(markup){if(!window.DOMParser){var progIDs=['Msxml2.DOMDocument.3.0','Msxml2.DOMDocument'];for(var i=0;i<progIDs.length;i++){try{var xmlDOM=new ActiveXObject(progIDs[i]);xmlDOM.async=false;xmlDOM.loadXML(markup);xmlDOM.setProperty('SelectionLanguage','XPath');return xmlDOM;} catch(ex){}}} else{try{var domParser=new DOMParser();return domParser.parseFromString(markup,'text/xml');} catch(ex){}} return null;}
var ScriptLoader=function ScriptLoader(scriptURLs){Debug.assert((scriptURLs)&&(scriptURLs.length));this._scriptURLs=scriptURLs;this._scriptLoadIndex=-1;}
ScriptLoader.prototype={_scriptURLs:null,_loadedHandler:null,_errorHandler:null,_isIE:false,_onLoadHandler:null,_onErrorHandler:null,_scriptLoadIndex:0,_scriptElements:null,_loadedScripts:0,_inError:false,_loaded:false,dispose:function(){if(this._scriptElements){for(var i=0;i<this._scriptElements.length;i++){var scriptElement=this._scriptElements[i];if(this._isIE){scriptElement.detachEvent('onreadystatechange',this._onLoadHandler);} else{scriptElement.detachEvent('onload',this._onLoadHandler);scriptElement.detachEvent('onerror',this._onErrorHandler);}} this._scriptElements=null;}},load:function(loadInParallel,timeout,loadedHandler,errorHandler){Debug.assert(loadedHandler);Debug.assert(errorHandler);this._loadedHandler=loadedHandler;this._errorHandler=errorHandler;this._isIE=(window.navigator.userAgent.indexOf('MSIE')>=0);this._onLoadHandler=Delegate.create(this,this._onScriptLoad);if(!this._isIE){this._onErrorHandler=Delegate.create(this,this._onScriptError);} this._scriptElements=[];if(loadInParallel){for(var i=0;i<this._scriptURLs.length;i++){this._loadScript(this._scriptURLs[i]);}} else{this._scriptLoadIndex++;this._loadScript(this._scriptURLs[this._scriptLoadIndex]);} if(timeout){window.setTimeout(Delegate.create(this,this._onScriptError),timeout);}},_loadScript:function(scriptURL){var scriptElement=document.createElement('SCRIPT');if(this._isIE){scriptElement.attachEvent('onreadystatechange',this._onLoadHandler);} else{scriptElement.readyState='complete';scriptElement.attachEvent('onload',this._onLoadHandler);scriptElement.attachEvent('onerror',this._onErrorHandler);} scriptElement.type='text/javascript';scriptElement.src=scriptURL;this._scriptElements.add(scriptElement);document.getElementsByTagName('HEAD')[0].appendChild(scriptElement);},_onScriptError:function(){if((!this._inError)&&(!this._loaded)){this._inError=true;this._errorHandler.invoke(this,EventArgs.Empty);}},_onScriptLoad:function(){if(this._inError){return;} var scriptElement=window.event.srcElement;if(!scriptElement.readyState){scriptElement=window.event.currentTarget;} if((scriptElement.readyState!='complete')&&(scriptElement.readyState!='loaded')){return;} if(this._scriptLoadIndex!=-1){this._scriptLoadIndex++;if(this._scriptLoadIndex!=this._scriptURLs.length){this._loadScript(this._scriptURLs[this._scriptLoadIndex]);return;}} else{this._loadedScripts++;if(this._loadedScripts!=this._scriptURLs.length){return;}} this._loaded=true;this._loadedHandler.invoke(this,EventArgs.Empty);}};ScriptLoader.createClass('ScriptLoader',null,IDisposable);var ScriptHost=function ScriptHost(){}
ScriptHost.get_isLoading=function(){return ScriptHost._loading;}
ScriptHost.add_load=function(value){if(ScriptHost._loaded){value.invoke(null,EventArgs.Empty);} else{ScriptHost._loadHandler=Delegate.combine(ScriptHost._loadHandler,value);}}
ScriptHost.remove_load=function(value){ScriptHost._loadHandler=Delegate.remove(ScriptHost._loadHandler,value);}
ScriptHost.add_unload=function(value){ScriptHost._unloadHandler=Delegate.combine(ScriptHost._unloadHandler,value);}
ScriptHost.remove_unload=function(value){ScriptHost._unloadHandler=Delegate.remove(ScriptHost._unloadHandler,value);}
ScriptHost.close=function(){if(ScriptHost._fxScripts){ScriptHost._fxScripts.dispose();ScriptHost._fxScripts=null;} if(ScriptHost._coreScripts){ScriptHost._coreScripts.dispose();ScriptHost._coreScripts=null;} if(ScriptHost._unloadHandler){ScriptHost._unloadHandler.invoke(null,EventArgs.Empty);ScriptHost._unloadHandler=null;} if(ScriptHost._windowLoadHandler){window.detachEvent('onload',ScriptHost._windowLoadHandler);ScriptHost._windowLoadHandler=null;} if(ScriptHost._windowUnloadHandler){window.detachEvent('onunload',ScriptHost._windowUnloadHandler);ScriptHost._windowUnloadHandler=null;}}
ScriptHost.initialize=function(coreScriptURLs,fxScriptURLs){if(!ScriptHost._initialized){ScriptHost._initialized=true;if(ScriptHost._windowLoadHandler){window.detachEvent('onload',ScriptHost._windowLoadHandler);ScriptHost._windowLoadHandler=null;} if((coreScriptURLs)&&(coreScriptURLs.length)){ScriptHost._coreScripts=new ScriptLoader(coreScriptURLs);} if((fxScriptURLs)&&(fxScriptURLs.length)){ScriptHost._fxScripts=new ScriptLoader(fxScriptURLs);} if((!ScriptHost._coreScripts)&&(!ScriptHost._fxScripts)){ScriptHost._onLoaded();} else{ScriptHost._loadScripts();}}}
ScriptHost._loadScripts=function(){ScriptHost._loading=true;if(ScriptHost._coreScripts){ScriptHost._coreScripts.load(false,20*1000,Delegate.create(null,ScriptHost._onScriptsCompleted),Delegate.create(null,ScriptHost._onScriptsError));return;} else{ScriptHost._fxScripts.load(true,20*1000,Delegate.create(null,ScriptHost._onScriptsCompleted),Delegate.create(null,ScriptHost._onScriptsError));}}
ScriptHost._onLoaded=function(){ScriptHost._loaded=true;if(window.main){window.main();} if(ScriptHost._loadHandler){ScriptHost._loadHandler.invoke(null,EventArgs.Empty);ScriptHost._loadHandler=null;}}
ScriptHost._onScriptsCompleted=function(sender,e){if(sender==ScriptHost._coreScripts){ScriptHost._coreScripts.dispose();ScriptHost._coreScripts=null;if(ScriptHost._fxScripts){ScriptHost._fxScripts.load(true,20*1000,Delegate.create(null,ScriptHost._onScriptsCompleted),Delegate.create(null,ScriptHost._onScriptsError));return;}} else{ScriptHost._fxScripts.dispose();ScriptHost._fxScripts=null;} ScriptHost._loading=false;ScriptHost._onLoaded();}
ScriptHost._onScriptsError=function(sender,e){}
ScriptHost._onWindowLoad=function(){ScriptHost.initialize(null,null);}
ScriptHost._onWindowUnload=function(){ScriptHost.close();}
ScriptHost.createClass('ScriptHost');ScriptHost._coreScripts=null;ScriptHost._fxScripts=null;ScriptHost._loadHandler=null;ScriptHost._unloadHandler=null;ScriptHost._initialized=false;ScriptHost._loading=false;ScriptHost._loaded=false;ScriptHost._windowLoadHandler=Delegate.create(null,ScriptHost._onWindowLoad);ScriptHost._windowUnloadHandler=Delegate.create(null,ScriptHost._onWindowUnload);window.attachEvent('onload',ScriptHost._windowLoadHandler);window.attachEvent('onunload',ScriptHost._windowUnloadHandler);

var dojoClass = dojo;
var dijitClass = dijit;
if (this["google"] != null && google.maps && google.maps.event) {
	var GoogleEvent = google.maps.event;
}
/*
	DijitObjects = {};
if (!DijitObjects.form)
	DijitObjects.form = {};

DijitObjects.form.__SliderParams = function() {}
*/



// Dojo.js
//


Type.createNamespace('js.org.Dojo.DojoObjects');

////////////////////////////////////////////////////////////////////////////////
// js.org.Dojo.DojoObjects._KeysEnums

js.org.Dojo.DojoObjects._KeysEnums = function js_org_Dojo_DojoObjects__KeysEnums() {
    /// <field name="ALT" type="Number" integer="true">
    /// </field>
    /// <field name="BACKSPACE" type="Number" integer="true">
    /// </field>
    /// <field name="capS_LOCK" type="Number" integer="true">
    /// </field>
    /// <field name="CLEAR" type="Number" integer="true">
    /// </field>
    /// <field name="CTRL" type="Number" integer="true">
    /// </field>
    /// <field name="DELETE" type="Number" integer="true">
    /// </field>
    /// <field name="dowN_ARROW" type="Number" integer="true">
    /// </field>
    /// <field name="END" type="Number" integer="true">
    /// </field>
    /// <field name="ENTER" type="Number" integer="true">
    /// </field>
    /// <field name="ESCAPE" type="Number" integer="true">
    /// </field>
    /// <field name="f1" type="Number" integer="true">
    /// </field>
    /// <field name="f2" type="Number" integer="true">
    /// </field>
    /// <field name="f3" type="Number" integer="true">
    /// </field>
    /// <field name="f4" type="Number" integer="true">
    /// </field>
    /// <field name="f5" type="Number" integer="true">
    /// </field>
    /// <field name="f6" type="Number" integer="true">
    /// </field>
    /// <field name="f7" type="Number" integer="true">
    /// </field>
    /// <field name="f8" type="Number" integer="true">
    /// </field>
    /// <field name="f9" type="Number" integer="true">
    /// </field>
    /// <field name="f10" type="Number" integer="true">
    /// </field>
    /// <field name="f11" type="Number" integer="true">
    /// </field>
    /// <field name="f12" type="Number" integer="true">
    /// </field>
    /// <field name="f13" type="Number" integer="true">
    /// </field>
    /// <field name="f14" type="Number" integer="true">
    /// </field>
    /// <field name="f15" type="Number" integer="true">
    /// </field>
    /// <field name="HELP" type="Number" integer="true">
    /// </field>
    /// <field name="HOME" type="Number" integer="true">
    /// </field>
    /// <field name="INSERT" type="Number" integer="true">
    /// </field>
    /// <field name="lefT_ARROW" type="Number" integer="true">
    /// </field>
    /// <field name="lefT_WINDOW" type="Number" integer="true">
    /// </field>
    /// <field name="numpaD_0" type="Number" integer="true">
    /// </field>
    /// <field name="numpaD_1" type="Number" integer="true">
    /// </field>
    /// <field name="numpaD_2" type="Number" integer="true">
    /// </field>
    /// <field name="numpaD_3" type="Number" integer="true">
    /// </field>
    /// <field name="numpaD_4" type="Number" integer="true">
    /// </field>
    /// <field name="numpaD_5" type="Number" integer="true">
    /// </field>
    /// <field name="numpaD_6" type="Number" integer="true">
    /// </field>
    /// <field name="numpaD_7" type="Number" integer="true">
    /// </field>
    /// <field name="numpaD_8" type="Number" integer="true">
    /// </field>
    /// <field name="numpaD_9" type="Number" integer="true">
    /// </field>
    /// <field name="numpaD_DIVIDE" type="Number" integer="true">
    /// </field>
    /// <field name="numpaD_ENTER" type="Number" integer="true">
    /// </field>
    /// <field name="numpaD_MINUS" type="Number" integer="true">
    /// </field>
    /// <field name="numpaD_MULTIPLY" type="Number" integer="true">
    /// </field>
    /// <field name="numpaD_PERIOD" type="Number" integer="true">
    /// </field>
    /// <field name="numpaD_PLUS" type="Number" integer="true">
    /// </field>
    /// <field name="nuM_LOCK" type="Number" integer="true">
    /// </field>
    /// <field name="pagE_DOWN" type="Number" integer="true">
    /// </field>
    /// <field name="pagE_UP" type="Number" integer="true">
    /// </field>
    /// <field name="PAUSE" type="Number" integer="true">
    /// </field>
    /// <field name="righT_ARROW" type="Number" integer="true">
    /// </field>
    /// <field name="righT_WINDOW" type="Number" integer="true">
    /// </field>
    /// <field name="scrolL_LOCK" type="Number" integer="true">
    /// </field>
    /// <field name="SELECT" type="Number" integer="true">
    /// </field>
    /// <field name="SHIFT" type="Number" integer="true">
    /// </field>
    /// <field name="SPACE" type="Number" integer="true">
    /// </field>
    /// <field name="TAB" type="Number" integer="true">
    /// </field>
    /// <field name="uP_ARROW" type="Number" integer="true">
    /// </field>
}
js.org.Dojo.DojoObjects._KeysEnums.prototype = {
    ALT: 0,
    BACKSPACE: 0,
    capS_LOCK: 0,
    CLEAR: 0,
    CTRL: 0,
    DELETE: 0,
    dowN_ARROW: 0,
    END: 0,
    ENTER: 0,
    ESCAPE: 0,
    f1: 0,
    f2: 0,
    f3: 0,
    f4: 0,
    f5: 0,
    f6: 0,
    f7: 0,
    f8: 0,
    f9: 0,
    f10: 0,
    f11: 0,
    f12: 0,
    f13: 0,
    f14: 0,
    f15: 0,
    HELP: 0,
    HOME: 0,
    INSERT: 0,
    lefT_ARROW: 0,
    lefT_WINDOW: 0,
    numpaD_0: 0,
    numpaD_1: 0,
    numpaD_2: 0,
    numpaD_3: 0,
    numpaD_4: 0,
    numpaD_5: 0,
    numpaD_6: 0,
    numpaD_7: 0,
    numpaD_8: 0,
    numpaD_9: 0,
    numpaD_DIVIDE: 0,
    numpaD_ENTER: 0,
    numpaD_MINUS: 0,
    numpaD_MULTIPLY: 0,
    numpaD_PERIOD: 0,
    numpaD_PLUS: 0,
    nuM_LOCK: 0,
    pagE_DOWN: 0,
    pagE_UP: 0,
    PAUSE: 0,
    righT_ARROW: 0,
    righT_WINDOW: 0,
    scrolL_LOCK: 0,
    SELECT: 0,
    SHIFT: 0,
    SPACE: 0,
    TAB: 0,
    uP_ARROW: 0
}


////////////////////////////////////////////////////////////////////////////////
// js.org.Dojo.DojoObjects.__WipeArgs

js.org.Dojo.DojoObjects.__WipeArgs = function js_org_Dojo_DojoObjects___WipeArgs() {
    /// <field name="node" type="Object" domElement="true">
    /// </field>
    /// <field name="duration" type="Number" integer="true">
    /// </field>
    /// <field name="easing" type="js.org.Dojo.DojoObjects.__EasingEventHandler">
    /// </field>
}
js.org.Dojo.DojoObjects.__WipeArgs.prototype = {
    node: null,
    duration: 0,
    easing: null
}


////////////////////////////////////////////////////////////////////////////////
// js.org.Dojo.DojoObjects._Box

js.org.Dojo.DojoObjects._Box = function js_org_Dojo_DojoObjects__Box() {
    /// <field name="h" type="Number" integer="true">
    /// </field>
    /// <field name="l" type="Number" integer="true">
    /// </field>
    /// <field name="t" type="Number" integer="true">
    /// </field>
    /// <field name="w" type="Number" integer="true">
    /// </field>
}
js.org.Dojo.DojoObjects._Box.prototype = {
    h: 0,
    l: 0,
    t: 0,
    w: 0
}


////////////////////////////////////////////////////////////////////////////////
// js.org.Dojo.DojoObjects.__RegexpOptions

js.org.Dojo.DojoObjects.__RegexpOptions = function js_org_Dojo_DojoObjects___RegexpOptions() {
    /// <field name="locale" type="String">
    /// </field>
    /// <field name="pattern" type="String">
    /// </field>
    /// <field name="places" type="Object">
    /// </field>
    /// <field name="strict" type="Object">
    /// </field>
    /// <field name="type" type="String">
    /// </field>
}
js.org.Dojo.DojoObjects.__RegexpOptions.prototype = {
    locale: null,
    pattern: null,
    places: null,
    strict: null,
    type: null
}


////////////////////////////////////////////////////////////////////////////////
// js.org.Dojo.DojoObjects.__ParseOptions

js.org.Dojo.DojoObjects.__ParseOptions = function js_org_Dojo_DojoObjects___ParseOptions() {
    /// <field name="currency" type="Object">
    /// </field>
    /// <field name="locale" type="String">
    /// </field>
    /// <field name="pattern" type="String">
    /// </field>
    /// <field name="strict" type="Object">
    /// </field>
    /// <field name="type" type="String">
    /// </field>
}
js.org.Dojo.DojoObjects.__ParseOptions.prototype = {
    currency: null,
    locale: null,
    pattern: null,
    strict: null,
    type: null
}


////////////////////////////////////////////////////////////////////////////////
// js.org.Dojo.DojoObjects.__FormatOptions

js.org.Dojo.DojoObjects.__FormatOptions = function js_org_Dojo_DojoObjects___FormatOptions() {
    /// <field name="currency" type="String">
    /// </field>
    /// <field name="locale" type="String">
    /// </field>
    /// <field name="pattern" type="String">
    /// </field>
    /// <field name="places" type="Number" integer="true">
    /// </field>
    /// <field name="round" type="Number" integer="true">
    /// </field>
    /// <field name="symbol" type="String">
    /// </field>
    /// <field name="type" type="String">
    /// </field>
}
js.org.Dojo.DojoObjects.__FormatOptions.prototype = {
    currency: null,
    locale: null,
    pattern: null,
    places: 0,
    round: 0,
    symbol: null,
    type: 'decimal'
}


////////////////////////////////////////////////////////////////////////////////
// js.org.Dojo.DojoObjects.NodeList

js.org.Dojo.DojoObjects.NodeList = function js_org_Dojo_DojoObjects_NodeList() {
    /// <summary>
    /// NodeList extends DOMElement[] so you can simply cast a DOMElement[] returned by dojo.query to this to benefit from methods
    /// </summary>
}
js.org.Dojo.DojoObjects.NodeList.prototype = {
    
    addClass: function js_org_Dojo_DojoObjects_NodeList$addClass(className) {
        /// <param name="className" type="String">
        /// </param>
        /// <returns type="js.org.Dojo.DojoObjects.NodeList"></returns>
        return null;
    },
    
    adopt: function js_org_Dojo_DojoObjects_NodeList$adopt(nodeList, position) {
        /// <param name="nodeList" type="js.org.Dojo.DojoObjects.NodeList">
        /// </param>
        /// <param name="position" type="String">
        /// </param>
        /// <returns type="js.org.Dojo.DojoObjects.NodeList"></returns>
        return null;
    },
    
    anim: function js_org_Dojo_DojoObjects_NodeList$anim(properties, duration, easing, onEnd, delay) {
        /// <summary>
        /// Animate one or more CSS properties for all nodes in this list. The returned animation object will already be playing when it is returned. See the docs for dojo.anim for full details.
        /// </summary>
        /// <param name="properties" type="Object">
        /// A dictionary of '__PropertyInfo' with the names being the CSS properties.
        /// Use camel case instead of hyphens
        /// </param>
        /// <param name="duration" type="Number" integer="true">
        /// </param>
        /// <param name="easing" type="Delegate">
        /// </param>
        /// <param name="onEnd" type="Delegate">
        /// </param>
        /// <param name="delay" type="Number" integer="true">
        /// </param>
        /// <returns type="js.org.Dojo.DojoObjects._Animation"></returns>
        return null;
    },
    
    animateProperty: function js_org_Dojo_DojoObjects_NodeList$animateProperty(args) {
        /// <param name="args" type="js.org.Dojo.DojoObjects.__AnimArgs">
        /// </param>
        /// <returns type="js.org.Dojo.DojoObjects._Animation"></returns>
        return null;
    },
    
    at: function js_org_Dojo_DojoObjects_NodeList$at(index1, index2, index3, index4, index5) {
        /// <param name="index1" type="Number" integer="true">
        /// </param>
        /// <param name="index2" type="Number" integer="true">
        /// </param>
        /// <param name="index3" type="Number" integer="true">
        /// </param>
        /// <param name="index4" type="Number" integer="true">
        /// </param>
        /// <param name="index5" type="Number" integer="true">
        /// </param>
        /// <returns type="js.org.Dojo.DojoObjects.NodeList"></returns>
        return null;
    },
    
    concat: function js_org_Dojo_DojoObjects_NodeList$concat(item) {
        /// <param name="item" type="Object">
        /// </param>
        /// <returns type="js.org.Dojo.DojoObjects.NodeList"></returns>
        return null;
    },
    
    empty: function js_org_Dojo_DojoObjects_NodeList$empty() {
    },
    
    every: function js_org_Dojo_DojoObjects_NodeList$every(callback, thisObject) {
        /// <param name="callback" type="Delegate">
        /// </param>
        /// <param name="thisObject" type="Object">
        /// </param>
        /// <returns type="Boolean"></returns>
        return true;
    },
    
    fadeOut: function js_org_Dojo_DojoObjects_NodeList$fadeOut(args) {
        /// <param name="args" type="js.org.Dojo.DojoObjects.__FadeArgs">
        /// </param>
        /// <returns type="js.org.Dojo.DojoObjects._Animation"></returns>
        return null;
    },
    
    fadeIn: function js_org_Dojo_DojoObjects_NodeList$fadeIn(args) {
        /// <param name="args" type="js.org.Dojo.DojoObjects.__FadeArgs">
        /// </param>
        /// <returns type="js.org.Dojo.DojoObjects._Animation"></returns>
        return null;
    },
    
    fadeTo: function js_org_Dojo_DojoObjects_NodeList$fadeTo(args) {
        /// <param name="args" type="js.org.Dojo.DojoObjects.__FadeArgs">
        /// </param>
        /// <returns type="js.org.Dojo.DojoObjects._Animation"></returns>
        return null;
    },
    
    forEach: function js_org_Dojo_DojoObjects_NodeList$forEach(callback) {
        /// <param name="callback" type="Delegate">
        /// </param>
        /// <returns type="js.org.Dojo.DojoObjects.NodeList"></returns>
        return null;
    },
    
    query: function js_org_Dojo_DojoObjects_NodeList$query(queryStr) {
        /// <param name="queryStr" type="String">
        /// </param>
        /// <returns type="js.org.Dojo.DojoObjects.NodeList"></returns>
        return null;
    },
    
    removeClass: function js_org_Dojo_DojoObjects_NodeList$removeClass(className) {
        /// <param name="className" type="String">
        /// </param>
        /// <returns type="js.org.Dojo.DojoObjects.NodeList"></returns>
        return null;
    },
    
    toggleClass: function js_org_Dojo_DojoObjects_NodeList$toggleClass(className, condition) {
        /// <param name="className" type="String">
        /// </param>
        /// <param name="condition" type="Object">
        /// </param>
        /// <returns type="js.org.Dojo.DojoObjects.NodeList"></returns>
        return null;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.org.Dojo.DojoObjects.__FadeArgs

js.org.Dojo.DojoObjects.__FadeArgs = function js_org_Dojo_DojoObjects___FadeArgs(node, duration, easing) {
    /// <param name="node" type="Object" domElement="true">
    /// </param>
    /// <param name="duration" type="Number" integer="true">
    /// </param>
    /// <param name="easing" type="js.org.Dojo.DojoObjects.__EasingEventHandler">
    /// </param>
    /// <field name="node" type="Object" domElement="true">
    /// </field>
    /// <field name="duration" type="Number" integer="true">
    /// </field>
    /// <field name="easing" type="js.org.Dojo.DojoObjects.__EasingEventHandler">
    /// </field>
    this.node = node;
    this.duration = duration;
    this.easing = easing;
}
js.org.Dojo.DojoObjects.__FadeArgs.prototype = {
    node: null,
    duration: 0,
    easing: null
}


////////////////////////////////////////////////////////////////////////////////
// js.org.Dojo.DojoObjects.__PropertyInfo

js.org.Dojo.DojoObjects.__PropertyInfo = function js_org_Dojo_DojoObjects___PropertyInfo(name, start, end, unit) {
    /// <param name="name" type="String">
    /// </param>
    /// <param name="start" type="Number">
    /// </param>
    /// <param name="end" type="Number">
    /// </param>
    /// <param name="unit" type="String">
    /// </param>
    /// <field name="start" type="Number">
    /// </field>
    /// <field name="end" type="Number">
    /// </field>
    /// <field name="unit" type="String">
    /// </field>
    /// <field name="_Name" type="String">
    /// </field>
    if (!isNullOrUndefined(start)) {
        this.start = start;
    }
    if (!isNullOrUndefined(end)) {
        this.end = end;
    }
    if (!isNullOrUndefined(unit)) {
        unit = 'px';
    }
    this.unit = unit;
    this.set_name(name);
}
js.org.Dojo.DojoObjects.__PropertyInfo.prototype = {
    start: null,
    end: null,
    unit: null,
    _Name: null,
    
    get_name: function js_org_Dojo_DojoObjects___PropertyInfo$get_name() {
        /// <value type="String"></value>
        return this._Name;
    },
    set_name: function js_org_Dojo_DojoObjects___PropertyInfo$set_name(value) {
        /// <value type="String"></value>
        this._Name = value;
        var tmp = this._Name;
        while (tmp.indexOf('-') > -1) {
            var hyphenPos = tmp.indexOf('-');
            tmp = tmp.substr(0, hyphenPos) + tmp.substr(hyphenPos + 1, 1).toUpperCase() + tmp.substr(hyphenPos + 2);
        }
        this._Name = tmp;
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.org.Dojo.DojoObjects.__AnimArgs

js.org.Dojo.DojoObjects.__AnimArgs = function js_org_Dojo_DojoObjects___AnimArgs(node, props, durationMS, easingFunc, onEnd) {
    /// <param name="node" type="Object" domElement="true">
    /// </param>
    /// <param name="props" type="Array" elementType="__PropertyInfo">
    /// </param>
    /// <param name="durationMS" type="Number" integer="true">
    /// </param>
    /// <param name="easingFunc" type="js.org.Dojo.DojoObjects.__EasingEventHandler">
    /// </param>
    /// <param name="onEnd" type="DOMEventHandler">
    /// </param>
    /// <field name="duration" type="Number" integer="true">
    /// </field>
    /// <field name="easing" type="js.org.Dojo.DojoObjects.__EasingEventHandler">
    /// </field>
    /// <field name="node" type="Object" domElement="true">
    /// </field>
    /// <field name="properties" type="Object">
    /// </field>
    /// <field name="onEnd" type="DOMEventHandler">
    /// </field>
    node = dojoClass.byId(node);
    if (isNullOrUndefined(this.duration)) {
        durationMS = 1000;
    }
    this.properties = {};
    if (Type.canCast(props, js.org.Dojo.DojoObjects.__PropertyInfo)) {
        this.addProperty((props));
    }
    else {
        for (var i = 0; i < props.length; i++) {
            this.addProperty(props[i]);
        }
    }
    this.node = node;
    this.easing = easingFunc;
    this.onEnd = onEnd;
    this.duration = durationMS;
}
js.org.Dojo.DojoObjects.__AnimArgs.prototype = {
    
    addProperty: function js_org_Dojo_DojoObjects___AnimArgs$addProperty(p) {
        /// <param name="p" type="js.org.Dojo.DojoObjects.__PropertyInfo">
        /// </param>
        if (!isNullOrUndefined(p)) {
            this.properties[p.get_name()] = p;
        }
    },
    
    duration: 0,
    easing: null,
    node: null,
    properties: null,
    onEnd: null
}


////////////////////////////////////////////////////////////////////////////////
// js.org.Dojo.DojoObjects.__XhrArgs

js.org.Dojo.DojoObjects.__XhrArgs = function js_org_Dojo_DojoObjects___XhrArgs() {
    /// <field name="sync" type="Boolean">
    /// </field>
    /// <field name="content" type="Object">
    /// </field>
    /// <field name="headers" type="Object">
    /// </field>
    /// <field name="form" type="Object" domElement="true">
    /// </field>
    /// <field name="preventCache" type="Boolean">
    /// </field>
    /// <field name="timeout" type="Number" integer="true">
    /// Timeout , in ms.  Default 30 seconds.
    /// </field>
    /// <field name="url" type="String">
    /// </field>
    /// <field name="handleAs" type="String">
    /// </field>
    /// <field name="load" type="js.org.Dojo.DojoObjects.__ObjectParamHandler">
    /// </field>
    /// <field name="error" type="js.org.Dojo.DojoObjects.__ObjectParamHandler">
    /// </field>
    this.content = {};
    this.headers = {};
}
js.org.Dojo.DojoObjects.__XhrArgs.prototype = {
    sync: false,
    form: null,
    preventCache: false,
    timeout: 30000,
    url: null,
    handleAs: null,
    load: null,
    error: null
}


Type.createNamespace('js.org.Dojo.Util');

////////////////////////////////////////////////////////////////////////////////
// js.org.Dojo.Util.DojoRequireUtil

js.org.Dojo.Util.DojoRequireUtil = function js_org_Dojo_Util_DojoRequireUtil() {
    /// <field name="_FxRequired" type="Boolean" static="true">
    /// </field>
}
js.org.Dojo.Util.DojoRequireUtil.requireFx = function js_org_Dojo_Util_DojoRequireUtil$requireFx() {
    if (!js.org.Dojo.Util.DojoRequireUtil._FxRequired) {
        js.org.Dojo.Util.DojoRequireUtil._FxRequired = true;
        dojoClass.require('dojo.fx');
        dojoClass.addOnLoad(Delegate.create(null, js.org.Dojo.Util.DojoRequireUtil._fxLoaded));
    }
}
js.org.Dojo.Util.DojoRequireUtil._fxLoaded = function js_org_Dojo_Util_DojoRequireUtil$_fxLoaded() {
    dojo.fxClass = dojo.fx;
}


js.org.Dojo.DojoObjects._KeysEnums.createClass('js.org.Dojo.DojoObjects._KeysEnums');
js.org.Dojo.DojoObjects.__WipeArgs.createClass('js.org.Dojo.DojoObjects.__WipeArgs');
js.org.Dojo.DojoObjects._Box.createClass('js.org.Dojo.DojoObjects._Box');
js.org.Dojo.DojoObjects.__RegexpOptions.createClass('js.org.Dojo.DojoObjects.__RegexpOptions');
js.org.Dojo.DojoObjects.__ParseOptions.createClass('js.org.Dojo.DojoObjects.__ParseOptions');
js.org.Dojo.DojoObjects.__FormatOptions.createClass('js.org.Dojo.DojoObjects.__FormatOptions');
js.org.Dojo.DojoObjects.NodeList.createClass('js.org.Dojo.DojoObjects.NodeList');
js.org.Dojo.DojoObjects.__FadeArgs.createClass('js.org.Dojo.DojoObjects.__FadeArgs');
js.org.Dojo.DojoObjects.__PropertyInfo.createClass('js.org.Dojo.DojoObjects.__PropertyInfo');
js.org.Dojo.DojoObjects.__AnimArgs.createClass('js.org.Dojo.DojoObjects.__AnimArgs');
js.org.Dojo.DojoObjects.__XhrArgs.createClass('js.org.Dojo.DojoObjects.__XhrArgs');
js.org.Dojo.Util.DojoRequireUtil.createClass('js.org.Dojo.Util.DojoRequireUtil');
js.org.Dojo.Util.DojoRequireUtil._FxRequired = false;

// ---- Do not remove this footer ----
// This script was generated using Script# v0.5.5.0 (http://projects.nikhilk.net/ScriptSharp)
// -----------------------------------


// JavascriptCom.js
//


Type.createNamespace('js.com.cs.v1.AJAX');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.AJAX.METHOD

js.com.cs.v1.AJAX.METHOD = function() { 
    /// <field name="get" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="post" type="Number" integer="true" static="true">
    /// </field>
};
js.com.cs.v1.AJAX.METHOD.prototype = {
    get: 0, 
    post: 1
}
js.com.cs.v1.AJAX.METHOD.createEnum('js.com.cs.v1.AJAX.METHOD', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.AJAX.HANDLE_AS

js.com.cs.v1.AJAX.HANDLE_AS = function() { 
    /// <field name="XML" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="JSON" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="string" type="Number" integer="true" static="true">
    /// </field>
};
js.com.cs.v1.AJAX.HANDLE_AS.prototype = {
    XML: 2, 
    JSON: 1, 
    string: 0
}
js.com.cs.v1.AJAX.HANDLE_AS.createEnum('js.com.cs.v1.AJAX.HANDLE_AS', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.AJAX.AjaxClass

js.com.cs.v1.AJAX.AjaxClass = function js_com_cs_v1_AJAX_AjaxClass() {
}
js.com.cs.v1.AJAX.AjaxClass.xhr = function js_com_cs_v1_AJAX_AjaxClass$xhr(url, qsParameters, onLoad, onError, handleAs, method) {
    /// <summary>
    /// Retrieves a JSON Object from the specified URL.
    /// </summary>
    /// <param name="url" type="String">
    /// URL
    /// </param>
    /// <param name="qsParameters" type="Object">
    /// Querystring parameters as the form of an object
    /// </param>
    /// <param name="onLoad" type="js.org.Dojo.DojoObjects.__ObjectParamHandler">
    /// Delegate to call on load
    /// </param>
    /// <param name="onError" type="js.org.Dojo.DojoObjects.__ObjectParamHandler">
    /// Delegate to call on error
    /// </param>
    /// <param name="handleAs" type="js.com.cs.v1.AJAX.HANDLE_AS">
    /// Way to handle data
    /// </param>
    /// <param name="method" type="js.com.cs.v1.AJAX.METHOD">
    /// Way to submit data
    /// </param>
    /// <returns type="js.org.Dojo.DojoObjects.Deferred"></returns>
    if (isNullOrUndefined(onError)) {
        onError = null;
    }
    if (isNullOrUndefined(handleAs)) {
        handleAs = js.com.cs.v1.AJAX.HANDLE_AS.JSON;
    }
    if (isNullOrUndefined(method)) {
        method = js.com.cs.v1.AJAX.METHOD.get;
    }
    var args = {};
    args.url = url;
    args.handleAs = js.com.cs.v1.AJAX.AjaxClass.handleAsToString(handleAs);
    args.content = qsParameters;
    args.load = onLoad;
    args.error = onError;
    if (method === js.com.cs.v1.AJAX.METHOD.get) {
        return dojoClass.xhrGet(args);
    }
    else {
        return dojoClass.xhrPost(args);
    }
}
js.com.cs.v1.AJAX.AjaxClass.handleAsToString = function js_com_cs_v1_AJAX_AjaxClass$handleAsToString(handleAs) {
    /// <param name="handleAs" type="js.com.cs.v1.AJAX.HANDLE_AS">
    /// </param>
    /// <returns type="String"></returns>
    switch (handleAs) {
        case js.com.cs.v1.AJAX.HANDLE_AS.JSON:
            return 'json';
        case js.com.cs.v1.AJAX.HANDLE_AS.string:
            return 'text';
        case js.com.cs.v1.AJAX.HANDLE_AS.XML:
            return 'xml';
    }
    return null;
}


Type.createNamespace('js.com.cs.v1.Controls.Common');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Common.IMyDOMElement

js.com.cs.v1.Controls.Common.IMyDOMElement = function() { 
};
js.com.cs.v1.Controls.Common.IMyDOMElement.prototype = {
    add_onClick : null,
    remove_onClick : null,
    add_onMouseDown : null,
    remove_onMouseDown : null,
    add_onMouseUp : null,
    remove_onMouseUp : null,
    add_onKeyUp : null,
    remove_onKeyUp : null,
    add_onKeyDown : null,
    remove_onKeyDown : null,
    add_onKeyPress : null,
    remove_onKeyPress : null,
    get_style : null,
    addClass : null,
    removeClass : null,
    toggleClass : null,
    get_myDomElement : null
}
js.com.cs.v1.Controls.Common.IMyDOMElement.createInterface('js.com.cs.v1.Controls.Common.IMyDOMElement');


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Common.HREF_TARGET

js.com.cs.v1.Controls.Common.HREF_TARGET = function() { 
    /// <field name="blank" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="self" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="parent" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="top" type="Number" integer="true" static="true">
    /// </field>
};
js.com.cs.v1.Controls.Common.HREF_TARGET.prototype = {
    blank: 0, 
    self: 1, 
    parent: 2, 
    top: 3
}
js.com.cs.v1.Controls.Common.HREF_TARGET.createEnum('js.com.cs.v1.Controls.Common.HREF_TARGET', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Common.LoadingCtrl

js.com.cs.v1.Controls.Common.LoadingCtrl = function js_com_cs_v1_Controls_Common_LoadingCtrl(attachedDOMNode, loadingImage, loadingText, errorImage, errorText) {
    /// <param name="attachedDOMNode" type="js.com.cs.v1.Controls.Common.MyDOMElement">
    /// </param>
    /// <param name="loadingImage" type="String">
    /// </param>
    /// <param name="loadingText" type="String">
    /// </param>
    /// <param name="errorImage" type="String">
    /// </param>
    /// <param name="errorText" type="String">
    /// </param>
    /// <field name="fadE_IN_OUT_TIME" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="loadingImage" type="String">
    /// </field>
    /// <field name="errorImage" type="String">
    /// </field>
    /// <field name="successImage" type="String">
    /// </field>
    /// <field name="loadingText" type="String">
    /// </field>
    /// <field name="errorText" type="String">
    /// </field>
    /// <field name="attachedDOMNode" type="js.com.cs.v1.Controls.Common.MyDOMElement">
    /// </field>
    /// <field name="_tb" type="js.com.cs.v1.Controls.Common.MyTableElement">
    /// </field>
    /// <field name="_tdText" type="js.com.cs.v1.Controls.Common.MyTableCellElement">
    /// </field>
    /// <field name="domNode" type="js.com.cs.v1.Controls.Common.MyTableElement">
    /// </field>
    /// <field name="_img" type="js.com.cs.v1.Controls.Common.MyImageElement">
    /// </field>
    this.attachedDOMNode = attachedDOMNode;
    if (!String.isNullOrEmpty(loadingImage)) {
        this.loadingImage = loadingImage;
    }
    if (!String.isNullOrEmpty(loadingText)) {
        this.loadingText = loadingText;
    }
    if (!String.isNullOrEmpty(errorImage)) {
        this.errorImage = errorImage;
    }
    if (!String.isNullOrEmpty(errorText)) {
        this.errorText = errorText;
    }
    this.domNode = new js.com.cs.v1.Controls.Common.MyTableElement();
    this.domNode.addClass('ajax-load');
    var tmpTr = this.domNode.insertRow(-1);
    var tmpTd = tmpTr.insertCell(-1);
    this._tb = new js.com.cs.v1.Controls.Common.MyTableElement();
    this._tb.addClass('ajax-load-child');
    tmpTd.appendChild(this._tb);
    var tr = this._tb.insertRow(-1);
    var tdImage = tr.insertCell(-1);
    tdImage.addClass('ajax-load-image');
    this._img = new js.com.cs.v1.Controls.Common.MyImageElement();
    tdImage.appendChild(this._img);
    this._tdText = tr.insertCell(-1);
    this._tdText.addClass('ajax-load-text');
    this.domNode.setOpacity(0);
}
js.com.cs.v1.Controls.Common.LoadingCtrl.prototype = {
    loadingImage: '/images/ajax_load.gif',
    errorImage: '/images/ajax_error.gif',
    successImage: '/images/ajax_success.gif',
    loadingText: 'Loading...',
    errorText: 'Error occured!',
    attachedDOMNode: null,
    _tb: null,
    _tdText: null,
    domNode: null,
    _img: null,
    
    _updateDimensions: function js_com_cs_v1_Controls_Common_LoadingCtrl$_updateDimensions() {
        var box = this.attachedDOMNode.getCoords();
        this.domNode.get_style().position = 'absolute';
        this.domNode.get_style().left = box.x + 'px';
        this.domNode.get_style().top = box.y + 'px';
        box.t = 0;
        box.l = 0;
        this.domNode.setContentBox(box);
    },
    
    show: function js_com_cs_v1_Controls_Common_LoadingCtrl$show() {
        this._updateDimensions();
        this.domNode.fadeIn(js.com.cs.v1.Controls.Common.LoadingCtrl.fadE_IN_OUT_TIME);
    },
    
    hide: function js_com_cs_v1_Controls_Common_LoadingCtrl$hide() {
        this.domNode.fadeOut(js.com.cs.v1.Controls.Common.LoadingCtrl.fadE_IN_OUT_TIME);
    },
    
    isLoading: function js_com_cs_v1_Controls_Common_LoadingCtrl$isLoading() {
        this._img.set_src(this.loadingImage);
        this._img.set_alt(this._tdText.set_innerText(this.loadingText));
        this.show();
    },
    
    isFinishedLoading: function js_com_cs_v1_Controls_Common_LoadingCtrl$isFinishedLoading() {
        this.hide();
    },
    
    isLoadingError: function js_com_cs_v1_Controls_Common_LoadingCtrl$isLoadingError() {
        this._img.set_src(this.errorImage);
        this._img.set_alt(this._tdText.set_innerText(this.errorText));
        this.show();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Common.MyAnchorElement

js.com.cs.v1.Controls.Common.MyAnchorElement = function js_com_cs_v1_Controls_Common_MyAnchorElement(domElement) {
    /// <param name="domElement" type="Object" domElement="true">
    /// </param>
    /// <field name="_target$1" type="js.com.cs.v1.Controls.Common.HREF_TARGET">
    /// </field>
    /// <field name="domElement" type="Object" domElement="true">
    /// </field>
    this._target$1 = js.com.cs.v1.Controls.Common.HREF_TARGET.self;
    js.com.cs.v1.Controls.Common.MyAnchorElement.constructBase(this, [ (isNullOrUndefined(domElement)) ? document.createElement('a') : domElement ]);
}
js.com.cs.v1.Controls.Common.MyAnchorElement.targetToString = function js_com_cs_v1_Controls_Common_MyAnchorElement$targetToString(target) {
    /// <param name="target" type="js.com.cs.v1.Controls.Common.HREF_TARGET">
    /// </param>
    /// <returns type="String"></returns>
    switch (target) {
        case js.com.cs.v1.Controls.Common.HREF_TARGET.blank:
            return '_blank';
        case js.com.cs.v1.Controls.Common.HREF_TARGET.self:
            return '_self';
        case js.com.cs.v1.Controls.Common.HREF_TARGET.parent:
            return '_parent';
        case js.com.cs.v1.Controls.Common.HREF_TARGET.top:
            return '_top';
    }
    return null;
}
js.com.cs.v1.Controls.Common.MyAnchorElement.prototype = {
    domElement: null,
    
    get_href: function js_com_cs_v1_Controls_Common_MyAnchorElement$get_href() {
        /// <value type="String"></value>
        return this.domElement.href;
    },
    set_href: function js_com_cs_v1_Controls_Common_MyAnchorElement$set_href(value) {
        /// <value type="String"></value>
        this.domElement.href = value;
        return value;
    },
    
    get_target: function js_com_cs_v1_Controls_Common_MyAnchorElement$get_target() {
        /// <value type="js.com.cs.v1.Controls.Common.HREF_TARGET"></value>
        return this._target$1;
    },
    set_target: function js_com_cs_v1_Controls_Common_MyAnchorElement$set_target(value) {
        /// <value type="js.com.cs.v1.Controls.Common.HREF_TARGET"></value>
        this.domElement.target = js.com.cs.v1.Controls.Common.MyAnchorElement.targetToString(value);
        this._target$1 = value;
        return value;
    },
    
    get_text: function js_com_cs_v1_Controls_Common_MyAnchorElement$get_text() {
        /// <value type="String"></value>
        return this.domElement.innerText;
    },
    set_text: function js_com_cs_v1_Controls_Common_MyAnchorElement$set_text(value) {
        /// <value type="String"></value>
        this.domElement.innerText = value;
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Common.MyDivElement

js.com.cs.v1.Controls.Common.MyDivElement = function js_com_cs_v1_Controls_Common_MyDivElement(domElement) {
    /// <param name="domElement" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    /// <field name="domElement" type="Object" domElement="true">
    /// </field>
    js.com.cs.v1.Controls.Common.MyDivElement.constructBase(this, [ (isNullOrUndefined(domElement)) ? document.createElement('div') : domElement ]);
}
js.com.cs.v1.Controls.Common.MyDivElement.prototype = {
    domElement: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Common.MyDOMElement

js.com.cs.v1.Controls.Common.MyDOMElement = function js_com_cs_v1_Controls_Common_MyDOMElement(domElement) {
    /// <param name="domElement" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    /// <field name="domElement" type="Object" domElement="true">
    /// </field>
    /// <field name="__onClickRef" type="EventHandler">
    /// </field>
    /// <field name="__onKeyUpWithEvent" type="js.com.cs.v1.Controls.Common.WindowEventHandler">
    /// </field>
    /// <field name="__onKeyDownWithEvent" type="js.com.cs.v1.Controls.Common.WindowEventHandler">
    /// </field>
    /// <field name="__onKeyPressWithEvent" type="js.com.cs.v1.Controls.Common.WindowEventHandler">
    /// </field>
    /// <field name="_loadingCtrl" type="js.com.cs.v1.Controls.Common.LoadingCtrl">
    /// </field>
    /// <field name="_fadeInAnim" type="js.org.Dojo.DojoObjects._Animation">
    /// </field>
    /// <field name="_inBlur" type="Boolean">
    /// </field>
    /// <field name="_fadeOutAnim" type="js.org.Dojo.DojoObjects._Animation">
    /// </field>
    /// <field name="_Dialog" type="dijit.Dialog">
    /// </field>
    if (!isNullOrUndefined(domElement)) {
        if (Type.canCast(domElement, String)) {
            this.domElement = document.getElementById(domElement);
        }
        else if (Type.canCast(domElement, Object)) {
            this.domElement = domElement;
        }
        else {
            throw new Error('Must either be a string or DOM Element');
        }
    }
    if (this.domElement == null) {
        throw new Error('Please specify element \'' + domElement + '\'');
    }
    this._initHandlers();
}
js.com.cs.v1.Controls.Common.MyDOMElement.getElement = function js_com_cs_v1_Controls_Common_MyDOMElement$getElement(domElement) {
    /// <param name="domElement" type="js.com.cs.v1.Controls.Common.MyDOMElement">
    /// </param>
    /// <returns type="js.com.cs.v1.Controls.Common.MyDOMElement"></returns>
    var e = null;
    if (Type.canCast(domElement, js.com.cs.v1.Controls.Common.MyDOMElement)) {
        e = domElement;
    }
    else {
        e = new js.com.cs.v1.Controls.Common.MyDOMElement(domElement);
    }
    return e;
}
js.com.cs.v1.Controls.Common.MyDOMElement.prototype = {
    domElement: null,
    
    _initHandlers: function js_com_cs_v1_Controls_Common_MyDOMElement$_initHandlers() {
        this.add_onClick(Delegate.create(this, this._myDOMElement_onClick));
        this.add_onKeyDown(Delegate.create(this, this._myDOMElement_onKeyDown));
        this.add_onKeyUp(Delegate.create(this, this._myDOMElement_onKeyUp));
        this.add_onKeyPress(Delegate.create(this, this._myDOMElement_onKeyPress));
    },
    
    _myDOMElement_onKeyPress: function js_com_cs_v1_Controls_Common_MyDOMElement$_myDOMElement_onKeyPress() {
        if (this.__onKeyPressWithEvent != null) {
            this.__onKeyPressWithEvent.invoke(this, window.event);
        }
    },
    
    _myDOMElement_onKeyUp: function js_com_cs_v1_Controls_Common_MyDOMElement$_myDOMElement_onKeyUp() {
        if (this.__onKeyUpWithEvent != null) {
            this.__onKeyUpWithEvent.invoke(this, window.event);
        }
    },
    
    _myDOMElement_onKeyDown: function js_com_cs_v1_Controls_Common_MyDOMElement$_myDOMElement_onKeyDown() {
        if (this.__onKeyDownWithEvent != null) {
            this.__onKeyDownWithEvent.invoke(this, window.event);
        }
    },
    
    _myDOMElement_onClick: function js_com_cs_v1_Controls_Common_MyDOMElement$_myDOMElement_onClick() {
        if (this.__onClickRef != null) {
            this.__onClickRef.invoke(this, null);
        }
    },
    
    appendChild: function js_com_cs_v1_Controls_Common_MyDOMElement$appendChild(obj) {
        /// <param name="obj" type="Object" domElement="true">
        /// </param>
        /// <returns type="Object" domElement="true"></returns>
        var elem = null;
        var arr = new js.com.cs.v1.General.Arrays.MyArray();
        if (Type.canCast(obj, js.com.cs.v1.Controls.Common.MyDOMElement)) {
            elem = (obj).domElement;
        }
        else if (Type.canCast(obj, Object)) {
            elem = obj;
        }
        else {
            throw new Error('Cannot append child if it is not DOMElement or \'MyDOMElement\'');
        }
        return this.domElement.appendChild(elem);
    },
    
    add_onClickRef: function js_com_cs_v1_Controls_Common_MyDOMElement$add_onClickRef(value) {
        /// <param name="value" type="Function" />
        this.__onClickRef = Delegate.combine(this.__onClickRef, value);
    },
    remove_onClickRef: function js_com_cs_v1_Controls_Common_MyDOMElement$remove_onClickRef(value) {
        /// <param name="value" type="Function" />
        this.__onClickRef = Delegate.remove(this.__onClickRef, value);
    },
    
    __onClickRef: null,
    
    add_onClick: function js_com_cs_v1_Controls_Common_MyDOMElement$add_onClick(value) {
        /// <param name="value" type="Function" />
        this.domElement.attachEvent('onclick', value);
    },
    remove_onClick: function js_com_cs_v1_Controls_Common_MyDOMElement$remove_onClick(value) {
        /// <param name="value" type="Function" />
        this.domElement.detachEvent('onclick', value);
    },
    
    add_onFocus: function js_com_cs_v1_Controls_Common_MyDOMElement$add_onFocus(value) {
        /// <param name="value" type="Function" />
        this.domElement.attachEvent('onfocus', value);
    },
    remove_onFocus: function js_com_cs_v1_Controls_Common_MyDOMElement$remove_onFocus(value) {
        /// <param name="value" type="Function" />
        this.domElement.detachEvent('onfocus', value);
    },
    
    add_onBlur: function js_com_cs_v1_Controls_Common_MyDOMElement$add_onBlur(value) {
        /// <param name="value" type="Function" />
        this.domElement.attachEvent('onblur', value);
    },
    remove_onBlur: function js_com_cs_v1_Controls_Common_MyDOMElement$remove_onBlur(value) {
        /// <param name="value" type="Function" />
        this.domElement.detachEvent('onblur', value);
    },
    
    add_onLoad: function js_com_cs_v1_Controls_Common_MyDOMElement$add_onLoad(value) {
        /// <param name="value" type="Function" />
        this.domElement.attachEvent('onload', value);
    },
    remove_onLoad: function js_com_cs_v1_Controls_Common_MyDOMElement$remove_onLoad(value) {
        /// <param name="value" type="Function" />
        this.domElement.detachEvent('onload', value);
    },
    
    add_onMouseDown: function js_com_cs_v1_Controls_Common_MyDOMElement$add_onMouseDown(value) {
        /// <param name="value" type="Function" />
        this.domElement.attachEvent('onmousedown', value);
    },
    remove_onMouseDown: function js_com_cs_v1_Controls_Common_MyDOMElement$remove_onMouseDown(value) {
        /// <param name="value" type="Function" />
        this.domElement.detachEvent('onmousedown', value);
    },
    
    add_onMouseOver: function js_com_cs_v1_Controls_Common_MyDOMElement$add_onMouseOver(value) {
        /// <param name="value" type="Function" />
        this.domElement.attachEvent('onmouseover', value);
    },
    remove_onMouseOver: function js_com_cs_v1_Controls_Common_MyDOMElement$remove_onMouseOver(value) {
        /// <param name="value" type="Function" />
        this.domElement.detachEvent('onmouseover', value);
    },
    
    add_onMouseOut: function js_com_cs_v1_Controls_Common_MyDOMElement$add_onMouseOut(value) {
        /// <param name="value" type="Function" />
        this.domElement.attachEvent('onmouseout', value);
    },
    remove_onMouseOut: function js_com_cs_v1_Controls_Common_MyDOMElement$remove_onMouseOut(value) {
        /// <param name="value" type="Function" />
        this.domElement.detachEvent('onmouseout', value);
    },
    
    add_onMouseUp: function js_com_cs_v1_Controls_Common_MyDOMElement$add_onMouseUp(value) {
        /// <param name="value" type="Function" />
        this.domElement.attachEvent('onmouseup', value);
    },
    remove_onMouseUp: function js_com_cs_v1_Controls_Common_MyDOMElement$remove_onMouseUp(value) {
        /// <param name="value" type="Function" />
        this.domElement.detachEvent('onmouseup', value);
    },
    
    add_onKeyUpWithEvent: function js_com_cs_v1_Controls_Common_MyDOMElement$add_onKeyUpWithEvent(value) {
        /// <param name="value" type="Function" />
        this.__onKeyUpWithEvent = Delegate.combine(this.__onKeyUpWithEvent, value);
    },
    remove_onKeyUpWithEvent: function js_com_cs_v1_Controls_Common_MyDOMElement$remove_onKeyUpWithEvent(value) {
        /// <param name="value" type="Function" />
        this.__onKeyUpWithEvent = Delegate.remove(this.__onKeyUpWithEvent, value);
    },
    
    __onKeyUpWithEvent: null,
    
    add_onKeyUp: function js_com_cs_v1_Controls_Common_MyDOMElement$add_onKeyUp(value) {
        /// <param name="value" type="Function" />
        this.domElement.attachEvent('onkeyup', value);
    },
    remove_onKeyUp: function js_com_cs_v1_Controls_Common_MyDOMElement$remove_onKeyUp(value) {
        /// <param name="value" type="Function" />
        this.domElement.detachEvent('onkeyup', value);
    },
    
    add_onKeyDown: function js_com_cs_v1_Controls_Common_MyDOMElement$add_onKeyDown(value) {
        /// <param name="value" type="Function" />
        this.domElement.attachEvent('onkeydown', value);
    },
    remove_onKeyDown: function js_com_cs_v1_Controls_Common_MyDOMElement$remove_onKeyDown(value) {
        /// <param name="value" type="Function" />
        this.domElement.detachEvent('onkeydown', value);
    },
    
    add_onKeyDownWithEvent: function js_com_cs_v1_Controls_Common_MyDOMElement$add_onKeyDownWithEvent(value) {
        /// <param name="value" type="Function" />
        this.__onKeyDownWithEvent = Delegate.combine(this.__onKeyDownWithEvent, value);
    },
    remove_onKeyDownWithEvent: function js_com_cs_v1_Controls_Common_MyDOMElement$remove_onKeyDownWithEvent(value) {
        /// <param name="value" type="Function" />
        this.__onKeyDownWithEvent = Delegate.remove(this.__onKeyDownWithEvent, value);
    },
    
    __onKeyDownWithEvent: null,
    
    add_onKeyPress: function js_com_cs_v1_Controls_Common_MyDOMElement$add_onKeyPress(value) {
        /// <param name="value" type="Function" />
        this.domElement.attachEvent('onkeypress', value);
    },
    remove_onKeyPress: function js_com_cs_v1_Controls_Common_MyDOMElement$remove_onKeyPress(value) {
        /// <param name="value" type="Function" />
        this.domElement.detachEvent('onkeypress', value);
    },
    
    add_onKeyPressWithEvent: function js_com_cs_v1_Controls_Common_MyDOMElement$add_onKeyPressWithEvent(value) {
        /// <param name="value" type="Function" />
        this.__onKeyPressWithEvent = Delegate.combine(this.__onKeyPressWithEvent, value);
    },
    remove_onKeyPressWithEvent: function js_com_cs_v1_Controls_Common_MyDOMElement$remove_onKeyPressWithEvent(value) {
        /// <param name="value" type="Function" />
        this.__onKeyPressWithEvent = Delegate.remove(this.__onKeyPressWithEvent, value);
    },
    
    __onKeyPressWithEvent: null,
    
    hide: function js_com_cs_v1_Controls_Common_MyDOMElement$hide() {
        this.domElement.style.display = 'none';
    },
    
    show: function js_com_cs_v1_Controls_Common_MyDOMElement$show() {
        this.domElement.style.display = '';
    },
    
    get_disabled: function js_com_cs_v1_Controls_Common_MyDOMElement$get_disabled() {
        /// <value type="Boolean"></value>
        return this.domElement.disabled;
    },
    set_disabled: function js_com_cs_v1_Controls_Common_MyDOMElement$set_disabled(value) {
        /// <value type="Boolean"></value>
        this.domElement.disabled = value;
        return value;
    },
    
    get_enabled: function js_com_cs_v1_Controls_Common_MyDOMElement$get_enabled() {
        /// <value type="Boolean"></value>
        return !this.get_disabled();
    },
    set_enabled: function js_com_cs_v1_Controls_Common_MyDOMElement$set_enabled(value) {
        /// <value type="Boolean"></value>
        this.set_disabled(!value);
        return value;
    },
    
    enable: function js_com_cs_v1_Controls_Common_MyDOMElement$enable() {
        this.set_enabled(true);
    },
    
    disable: function js_com_cs_v1_Controls_Common_MyDOMElement$disable() {
        this.set_disabled(true);
    },
    
    get_readOnly: function js_com_cs_v1_Controls_Common_MyDOMElement$get_readOnly() {
        /// <value type="Boolean"></value>
        return this.domElement.readonly;
    },
    set_readOnly: function js_com_cs_v1_Controls_Common_MyDOMElement$set_readOnly(value) {
        /// <value type="Boolean"></value>
        this.domElement.readonly = value;
        return value;
    },
    
    _loadingCtrl: null,
    
    get_loadingCtrl: function js_com_cs_v1_Controls_Common_MyDOMElement$get_loadingCtrl() {
        /// <value type="js.com.cs.v1.Controls.Common.LoadingCtrl"></value>
        this._initLoadingCtrl();
        return this._loadingCtrl;
    },
    
    performClick: function js_com_cs_v1_Controls_Common_MyDOMElement$performClick() {
        this.domElement.click();
    },
    
    _initLoadingCtrl: function js_com_cs_v1_Controls_Common_MyDOMElement$_initLoadingCtrl() {
        if (this._loadingCtrl == null) {
            this._loadingCtrl = new js.com.cs.v1.Controls.Common.LoadingCtrl(this);
            document.body.appendChild(this._loadingCtrl.domNode.domElement);
        }
    },
    
    isLoading: function js_com_cs_v1_Controls_Common_MyDOMElement$isLoading() {
        this._initLoadingCtrl();
        this._loadingCtrl.isLoading();
        this.fadeOut(js.com.cs.v1.Controls.Common.LoadingCtrl.fadE_IN_OUT_TIME);
    },
    
    isLoadingError: function js_com_cs_v1_Controls_Common_MyDOMElement$isLoadingError() {
        this._initLoadingCtrl();
        this._loadingCtrl.isLoadingError();
        this.fadeOut(js.com.cs.v1.Controls.Common.LoadingCtrl.fadE_IN_OUT_TIME);
    },
    
    isFinishedLoading: function js_com_cs_v1_Controls_Common_MyDOMElement$isFinishedLoading() {
        this._initLoadingCtrl();
        this._loadingCtrl.isFinishedLoading();
        this.fadeIn(js.com.cs.v1.Controls.Common.LoadingCtrl.fadE_IN_OUT_TIME);
    },
    
    get_tagName: function js_com_cs_v1_Controls_Common_MyDOMElement$get_tagName() {
        /// <value type="String"></value>
        return this.domElement.tagName.toLowerCase();
    },
    
    get_tagType: function js_com_cs_v1_Controls_Common_MyDOMElement$get_tagType() {
        /// <value type="String"></value>
        if (String.compare(this.get_tagName(), 'input', true) === 0) {
            var input = this.domElement;
            return input.type.toLowerCase();
        }
        return '';
    },
    
    get_style: function js_com_cs_v1_Controls_Common_MyDOMElement$get_style() {
        /// <value type="Style"></value>
        return this.domElement.style;
    },
    
    get_id: function js_com_cs_v1_Controls_Common_MyDOMElement$get_id() {
        /// <value type="String"></value>
        return this.domElement.id;
    },
    set_id: function js_com_cs_v1_Controls_Common_MyDOMElement$set_id(value) {
        /// <value type="String"></value>
        this.domElement.id = value;
        return value;
    },
    
    get_innerHTML: function js_com_cs_v1_Controls_Common_MyDOMElement$get_innerHTML() {
        /// <value type="String"></value>
        return this.domElement.innerHTML;
    },
    set_innerHTML: function js_com_cs_v1_Controls_Common_MyDOMElement$set_innerHTML(value) {
        /// <value type="String"></value>
        this.domElement.innerHTML = value;
        return value;
    },
    
    get_innerText: function js_com_cs_v1_Controls_Common_MyDOMElement$get_innerText() {
        /// <value type="String"></value>
        return this.domElement.innerText;
    },
    set_innerText: function js_com_cs_v1_Controls_Common_MyDOMElement$set_innerText(value) {
        /// <value type="String"></value>
        this.domElement.innerText = value;
        return value;
    },
    
    setOpacity: function js_com_cs_v1_Controls_Common_MyDOMElement$setOpacity(d) {
        /// <param name="d" type="Number">
        /// </param>
        if (js.com.cs.v1.Util.GeneralUtil.isJQuery()) {
            dojoClass.style(this.domElement, 'opacity', d);
        }
    },
    
    _fadeInAnim: null,
    
    focus: function js_com_cs_v1_Controls_Common_MyDOMElement$focus() {
        /// <returns type="Boolean"></returns>
        try {
            this.domElement.focus();
            return true;
        }
        catch (ex) {
            return false;
        }
    },
    
    _inBlur: false,
    
    blur: function js_com_cs_v1_Controls_Common_MyDOMElement$blur() {
        /// <returns type="Boolean"></returns>
        var b = true;
        if (!this._inBlur) {
            this._inBlur = true;
            try {
                this.domElement.blur();
            }
            catch ($e1) {
                b = false;
            }
            this._inBlur = false;
        }
        return b;
    },
    
    fadeIn: function js_com_cs_v1_Controls_Common_MyDOMElement$fadeIn(durationMS) {
        /// <param name="durationMS" type="Number" integer="true">
        /// </param>
        /// <returns type="js.org.Dojo.DojoObjects._Animation"></returns>
        if (this._fadeOutAnim != null && this._fadeOutAnim.status() === 'playing') {
            this._fadeOutAnim.stop(true);
        }
        this.show();
        var args = new js.org.Dojo.DojoObjects.__FadeArgs(this.domElement, durationMS, null);
        this._fadeInAnim = dojoClass.fadeIn(args);
        this._fadeInAnim.play();
        return this._fadeInAnim;
    },
    
    _fadeOutAnim: null,
    
    fadeOut: function js_com_cs_v1_Controls_Common_MyDOMElement$fadeOut(duration, onEnd) {
        /// <param name="duration" type="Number" integer="true">
        /// </param>
        /// <param name="onEnd" type="DOMEventHandler">
        /// If onEnd is specfied, the element display is not set to none
        /// </param>
        /// <returns type="js.org.Dojo.DojoObjects._Animation"></returns>
        if (duration > 0) {
            if (this._fadeInAnim != null && this._fadeInAnim.status() === 'playing') {
                this._fadeInAnim.stop(true);
            }
            this.show();
            var args = new js.org.Dojo.DojoObjects.__FadeArgs(this.domElement, duration, null);
            this._fadeOutAnim = dojoClass.fadeOut(args);
            if (isNullOrUndefined(onEnd)) {
                onEnd = Delegate.create(this, this.hide);
            }
            this._fadeOutAnim.onEnd = onEnd;
            this._fadeOutAnim.play();
            return this._fadeOutAnim;
        }
        else {
            this.setOpacity(0);
            this.hide();
            return null;
        }
    },
    
    wipeOut: function js_com_cs_v1_Controls_Common_MyDOMElement$wipeOut(durationMS) {
        /// <param name="durationMS" type="Number" integer="true">
        /// </param>
        /// <returns type="js.org.Dojo.DojoObjects._Animation"></returns>
        var args = {};
        args.node = this.domElement;
        args.duration = durationMS;
        var anim = dojo.fxClass.wipeOut(args);
        anim.play();
        return anim;
    },
    
    wipeIn: function js_com_cs_v1_Controls_Common_MyDOMElement$wipeIn(durationMS) {
        /// <param name="durationMS" type="Number" integer="true">
        /// </param>
        /// <returns type="js.org.Dojo.DojoObjects._Animation"></returns>
        var args = {};
        args.node = this.domElement;
        args.duration = durationMS;
        var anim = dojo.fxClass.wipeIn(args);
        anim.play();
        return anim;
    },
    
    getContentBox: function js_com_cs_v1_Controls_Common_MyDOMElement$getContentBox() {
        /// <returns type="js.org.Dojo.DojoObjects._Box"></returns>
        return dojoClass.contentBox(this.domElement);
    },
    
    setContentBox: function js_com_cs_v1_Controls_Common_MyDOMElement$setContentBox(box) {
        /// <param name="box" type="js.org.Dojo.DojoObjects._Box">
        /// </param>
        dojoClass.contentBox(this.domElement, box);
    },
    
    getMarginBox: function js_com_cs_v1_Controls_Common_MyDOMElement$getMarginBox() {
        /// <returns type="js.org.Dojo.DojoObjects._Box"></returns>
        return dojoClass.marginBox(this.domElement);
    },
    
    setMarginBox: function js_com_cs_v1_Controls_Common_MyDOMElement$setMarginBox(box) {
        /// <param name="box" type="js.org.Dojo.DojoObjects._Box">
        /// </param>
        dojoClass.marginBox(this.domElement, box);
    },
    
    getCoords: function js_com_cs_v1_Controls_Common_MyDOMElement$getCoords() {
        /// <returns type="js.org.Dojo.DojoObjects._BoxWithCoords"></returns>
        return dojoClass.coords(this.domElement);
    },
    
    placeChildBefore: function js_com_cs_v1_Controls_Common_MyDOMElement$placeChildBefore(elem) {
        /// <param name="elem" type="Object" domElement="true">
        /// </param>
        dojoClass.place(elem, this.domElement, 'before');
    },
    
    placeChildAfter: function js_com_cs_v1_Controls_Common_MyDOMElement$placeChildAfter(elem) {
        /// <param name="elem" type="Object" domElement="true">
        /// </param>
        dojoClass.place(elem, this.domElement, 'after');
    },
    
    _Dialog: null,
    
    _getCurrentDialog: function js_com_cs_v1_Controls_Common_MyDOMElement$_getCurrentDialog() {
        /// <returns type="dijit.Dialog"></returns>
        return this._Dialog;
    },
    
    showAsDialog: function js_com_cs_v1_Controls_Common_MyDOMElement$showAsDialog(title) {
        /// <param name="title" type="String">
        /// </param>
        /// <returns type="dijit.Dialog"></returns>
        if (this._Dialog != null) {
            this._Dialog.hide();
        }
        var p = {};
        p.title = title;
        if (this._Dialog == null) {
            this._Dialog = new dijit.Dialog(p, this.domElement);
        }
        this._Dialog.onUnload = Delegate.combine(Delegate.create(this, this._Dialog_OnUnload), this._Dialog.onUnload);
        this._Dialog.show();
        return this._Dialog;
    },
    
    _Dialog_OnUnload: function js_com_cs_v1_Controls_Common_MyDOMElement$_Dialog_OnUnload() {
    },
    
    hideDialog: function js_com_cs_v1_Controls_Common_MyDOMElement$hideDialog() {
        if (this._Dialog != null) {
            this._Dialog.hide();
            this._Dialog = null;
        }
        else {
            throw new Error(this.get_id() + ':: No dialog to hide!');
        }
    },
    
    addClass: function js_com_cs_v1_Controls_Common_MyDOMElement$addClass(className) {
        /// <param name="className" type="String">
        /// </param>
        dojoClass.addClass(this.domElement, className);
    },
    
    removeClass: function js_com_cs_v1_Controls_Common_MyDOMElement$removeClass(className) {
        /// <param name="className" type="String">
        /// </param>
        dojoClass.removeClass(this.domElement, className);
    },
    
    toggleClass: function js_com_cs_v1_Controls_Common_MyDOMElement$toggleClass(className) {
        /// <param name="className" type="String">
        /// </param>
        dojoClass.toggleClass(this.domElement, className);
    },
    
    get_form: function js_com_cs_v1_Controls_Common_MyDOMElement$get_form() {
        /// <summary>
        /// Returns the form element, if the item is an input element
        /// </summary>
        /// <value type="Object" domElement="true"></value>
        if (String.compare(this.get_tagName(), 'input', true) === 0 || String.compare(this.get_tagName(), 'select', true) === 0 || String.compare(this.get_tagName(), 'textarea', true) === 0) {
            var elem = this.domElement;
            return elem.form;
        }
        else {
            throw new Error('Cannot retrieve \'Form\' if the item is not a \'input\',\'select\', or \'textarea\'');
        }
    },
    
    get_title: function js_com_cs_v1_Controls_Common_MyDOMElement$get_title() {
        /// <value type="String"></value>
        return this.domElement.title;
    },
    set_title: function js_com_cs_v1_Controls_Common_MyDOMElement$set_title(value) {
        /// <value type="String"></value>
        this.domElement.title = value;
        return value;
    },
    
    clear: function js_com_cs_v1_Controls_Common_MyDOMElement$clear() {
        try {
            this.set_innerHTML('');
        }
        catch (e) {
            while (this.domElement.childNodes.length > 0) {
                this.domElement.removeChild(this.domElement.childNodes[0]);
            }
        }
    },
    
    setAttribute: function js_com_cs_v1_Controls_Common_MyDOMElement$setAttribute(name, value) {
        /// <param name="name" type="String">
        /// </param>
        /// <param name="value" type="String">
        /// </param>
        /// <returns type="DOMAttribute"></returns>
        if (isNullOrUndefined(value)) {
            this.clearAttribute(name);
            return null;
        }
        else {
            var attr = document.createAttribute(name);
            attr.value = value;
            this.domElement.attributes.setNamedItem(attr);
            return attr;
        }
    },
    
    clearAttribute: function js_com_cs_v1_Controls_Common_MyDOMElement$clearAttribute(name) {
        /// <param name="name" type="String">
        /// </param>
        this.domElement.attributes.removeNamedItem(name);
    },
    
    get_myDomElement: function js_com_cs_v1_Controls_Common_MyDOMElement$get_myDomElement() {
        /// <value type="js.com.cs.v1.Controls.Common.MyDOMElement"></value>
        return this;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Common.MyFormElement

js.com.cs.v1.Controls.Common.MyFormElement = function js_com_cs_v1_Controls_Common_MyFormElement(domElement) {
    /// <param name="domElement" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    /// <field name="domElement" type="Object" domElement="true">
    /// </field>
    js.com.cs.v1.Controls.Common.MyFormElement.constructBase(this, [ (isNullOrUndefined(domElement)) ? document.createElement('form') : domElement ]);
}
js.com.cs.v1.Controls.Common.MyFormElement.prototype = {
    domElement: null,
    
    checkIfFormContainsFilledFileUploads: function js_com_cs_v1_Controls_Common_MyFormElement$checkIfFormContainsFilledFileUploads() {
        /// <returns type="Boolean"></returns>
        var list = dojoClass.query('input[type=\'file\']', this.domElement);
        for (var i = 0; i < list.length; i++) {
            var fileUpload = new js.com.cs.v1.Controls.Form.MyFileUpload(list[i]);
            if (!String.isNullOrEmpty(fileUpload.get_value())) {
                return true;
            }
        }
        return false;
    },
    
    add_onSubmit: function js_com_cs_v1_Controls_Common_MyFormElement$add_onSubmit(value) {
        /// <param name="value" type="Function" />
        this.domElement.attachEvent('onsubmit', value);
    },
    remove_onSubmit: function js_com_cs_v1_Controls_Common_MyFormElement$remove_onSubmit(value) {
        /// <param name="value" type="Function" />
        this.domElement.detachEvent('onsubmit', value);
    },
    
    get_action: function js_com_cs_v1_Controls_Common_MyFormElement$get_action() {
        /// <value type="String"></value>
        return this.domElement.action;
    },
    set_action: function js_com_cs_v1_Controls_Common_MyFormElement$set_action(value) {
        /// <value type="String"></value>
        this.domElement.action = value;
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Common.MyImageElement

js.com.cs.v1.Controls.Common.MyImageElement = function js_com_cs_v1_Controls_Common_MyImageElement(domElement) {
    /// <param name="domElement" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    /// <field name="domElement" type="Object" domElement="true">
    /// </field>
    js.com.cs.v1.Controls.Common.MyImageElement.constructBase(this, [ (isNullOrUndefined(domElement)) ? document.createElement('img') : domElement ]);
}
js.com.cs.v1.Controls.Common.MyImageElement.prototype = {
    domElement: null,
    
    get_src: function js_com_cs_v1_Controls_Common_MyImageElement$get_src() {
        /// <value type="String"></value>
        return this.domElement.src;
    },
    set_src: function js_com_cs_v1_Controls_Common_MyImageElement$set_src(value) {
        /// <value type="String"></value>
        this.domElement.src = value;
        return value;
    },
    
    get_alt: function js_com_cs_v1_Controls_Common_MyImageElement$get_alt() {
        /// <value type="String"></value>
        return this.domElement.alt;
    },
    set_alt: function js_com_cs_v1_Controls_Common_MyImageElement$set_alt(value) {
        /// <value type="String"></value>
        this.domElement.alt = value;
        return value;
    },
    
    get_title: function js_com_cs_v1_Controls_Common_MyImageElement$get_title() {
        /// <value type="String"></value>
        return this.domElement.title;
    },
    set_title: function js_com_cs_v1_Controls_Common_MyImageElement$set_title(value) {
        /// <value type="String"></value>
        this.domElement.title = value;
        return value;
    },
    
    add_onLoad: function js_com_cs_v1_Controls_Common_MyImageElement$add_onLoad(value) {
        /// <param name="value" type="Function" />
        this.domElement.attachEvent('onload', value);
    },
    remove_onLoad: function js_com_cs_v1_Controls_Common_MyImageElement$remove_onLoad(value) {
        /// <param name="value" type="Function" />
        this.domElement.detachEvent('onload', value);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Common.MyInputElement

js.com.cs.v1.Controls.Common.MyInputElement = function js_com_cs_v1_Controls_Common_MyInputElement(domElement, inputType) {
    /// <param name="domElement" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    /// <param name="inputType" type="String">
    /// </param>
    /// <field name="domElement" type="Object" domElement="true">
    /// </field>
    js.com.cs.v1.Controls.Common.MyInputElement.constructBase(this, [ (isNullOrUndefined(domElement)) ? document.createElement('input') : domElement ]);
    if (!isNullOrUndefined(inputType)) {
        this.domElement.type = inputType;
    }
}
js.com.cs.v1.Controls.Common.MyInputElement.prototype = {
    domElement: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Common.MyLabelElement

js.com.cs.v1.Controls.Common.MyLabelElement = function js_com_cs_v1_Controls_Common_MyLabelElement(domElement) {
    /// <param name="domElement" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    /// <field name="_forElement$1" type="Object" domElement="true">
    /// </field>
    /// <field name="_forId$1" type="String">
    /// </field>
    js.com.cs.v1.Controls.Common.MyLabelElement.constructBase(this, [ (isNullOrUndefined(domElement)) ? document.createElement('label') : domElement ]);
}
js.com.cs.v1.Controls.Common.MyLabelElement.prototype = {
    _forElement$1: null,
    
    get_forElement: function js_com_cs_v1_Controls_Common_MyLabelElement$get_forElement() {
        /// <value type="Object" domElement="true"></value>
        return this._forElement$1;
    },
    set_forElement: function js_com_cs_v1_Controls_Common_MyLabelElement$set_forElement(value) {
        /// <value type="Object" domElement="true"></value>
        this._forElement$1 = value;
        this.set_forId(value.id);
        return value;
    },
    
    _forId$1: null,
    
    get_forId: function js_com_cs_v1_Controls_Common_MyLabelElement$get_forId() {
        /// <value type="String"></value>
        return this._forId$1;
    },
    set_forId: function js_com_cs_v1_Controls_Common_MyLabelElement$set_forId(value) {
        /// <value type="String"></value>
        this._forId$1 = value;
        this.setAttribute('for', value);
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Common.MyListItemElem

js.com.cs.v1.Controls.Common.MyListItemElem = function js_com_cs_v1_Controls_Common_MyListItemElem(domElement) {
    /// <param name="domElement" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    js.com.cs.v1.Controls.Common.MyListItemElem.constructBase(this, [ (isNullOrUndefined(domElement)) ? document.createElement('li') : domElement ]);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Common.MyParagraphElement

js.com.cs.v1.Controls.Common.MyParagraphElement = function js_com_cs_v1_Controls_Common_MyParagraphElement(domElement) {
    /// <param name="domElement" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    js.com.cs.v1.Controls.Common.MyParagraphElement.constructBase(this, [ (isNullOrUndefined(domElement)) ? document.createElement('p') : domElement ]);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Common.MySpanElement

js.com.cs.v1.Controls.Common.MySpanElement = function js_com_cs_v1_Controls_Common_MySpanElement(domElement) {
    /// <param name="domElement" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    js.com.cs.v1.Controls.Common.MySpanElement.constructBase(this, [ (isNullOrUndefined(domElement)) ? document.createElement('span') : domElement ]);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Common.MyTableCellElement

js.com.cs.v1.Controls.Common.MyTableCellElement = function js_com_cs_v1_Controls_Common_MyTableCellElement(domElement, heading) {
    /// <param name="domElement" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    /// <param name="heading" type="Boolean">
    /// To make it [th] - true or [td] - false
    /// </param>
    /// <field name="domElement" type="Object" domElement="true">
    /// </field>
    js.com.cs.v1.Controls.Common.MyTableCellElement.constructBase(this, [ (isNullOrUndefined(domElement)) ? document.createElement((isNullOrUndefined(heading) || !heading) ? 'td' : 'th') : domElement ]);
}
js.com.cs.v1.Controls.Common.MyTableCellElement.prototype = {
    domElement: null,
    
    get_cellIndex: function js_com_cs_v1_Controls_Common_MyTableCellElement$get_cellIndex() {
        /// <value type="Number" integer="true"></value>
        return this.domElement.get_cellIndex();
    },
    
    get_colSpan: function js_com_cs_v1_Controls_Common_MyTableCellElement$get_colSpan() {
        /// <value type="Number" integer="true"></value>
        return this.domElement.colSpan;
    },
    set_colSpan: function js_com_cs_v1_Controls_Common_MyTableCellElement$set_colSpan(value) {
        /// <value type="Number" integer="true"></value>
        this.domElement.colSpan = value;
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Common.MyTableElement

js.com.cs.v1.Controls.Common.MyTableElement = function js_com_cs_v1_Controls_Common_MyTableElement(domElement) {
    /// <param name="domElement" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    /// <field name="domElement" type="Object" domElement="true">
    /// </field>
    js.com.cs.v1.Controls.Common.MyTableElement.constructBase(this, [ (isNullOrUndefined(domElement)) ? document.createElement('table') : domElement ]);
}
js.com.cs.v1.Controls.Common.MyTableElement.prototype = {
    domElement: null,
    
    insertRow: function js_com_cs_v1_Controls_Common_MyTableElement$insertRow(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <returns type="js.com.cs.v1.Controls.Common.MyTableRowElement"></returns>
        if (isNullOrUndefined(index)) {
            index = -1;
        }
        var row = this.domElement.insertRow(index);
        return new js.com.cs.v1.Controls.Common.MyTableRowElement(row);
    },
    
    deleteRow: function js_com_cs_v1_Controls_Common_MyTableElement$deleteRow(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        var obj = index;
        if (Type.canCast(obj, js.com.cs.v1.Controls.Common.MyTableRowElement)) {
            var tr = obj;
            index = tr.domElement.rowIndex;
        }
        else if (Type.canCast(obj, Number)) {
        }
        this.domElement.deleteRow(index);
    },
    
    appendChild: function js_com_cs_v1_Controls_Common_MyTableElement$appendChild(obj) {
        /// <param name="obj" type="js.com.cs.v1.Controls.Common.MyDOMElement">
        /// </param>
        /// <returns type="Object" domElement="true"></returns>
        if (Type.canCast(obj, js.com.cs.v1.Controls.Common.MyTableRowElement)) {
            throw new Error('Please use the InsertRow method as adding a row via the appendChild is not compatible with all browsers');
        }
        return js.com.cs.v1.Controls.Common.MyTableElement.callBase(this, 'appendChild', [ obj ]);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Common.MyTableRowElement

js.com.cs.v1.Controls.Common.MyTableRowElement = function js_com_cs_v1_Controls_Common_MyTableRowElement(domElement) {
    /// <param name="domElement" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    /// <field name="domElement" type="Object" domElement="true">
    /// </field>
    js.com.cs.v1.Controls.Common.MyTableRowElement.constructBase(this, [ (isNullOrUndefined(domElement)) ? document.createElement('tr') : domElement ]);
}
js.com.cs.v1.Controls.Common.MyTableRowElement.prototype = {
    domElement: null,
    
    insertCell: function js_com_cs_v1_Controls_Common_MyTableRowElement$insertCell(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <returns type="js.com.cs.v1.Controls.Common.MyTableCellElement"></returns>
        if (isNullOrUndefined(index)) {
            index = -1;
        }
        var cell = this.domElement.insertCell(index);
        return new js.com.cs.v1.Controls.Common.MyTableCellElement(cell);
    },
    
    deleteCell: function js_com_cs_v1_Controls_Common_MyTableRowElement$deleteCell(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        var obj = index;
        if (Type.canCast(obj, js.com.cs.v1.Controls.Common.MyTableCellElement)) {
            var td = obj;
            index = td.get_cellIndex();
        }
        else if (Type.canCast(obj, Number)) {
        }
        this.domElement.deleteCell(index);
    },
    
    get_rowIndex: function js_com_cs_v1_Controls_Common_MyTableRowElement$get_rowIndex() {
        /// <value type="Number" integer="true"></value>
        return this.domElement.rowIndex;
    },
    
    appendChild: function js_com_cs_v1_Controls_Common_MyTableRowElement$appendChild(obj) {
        /// <param name="obj" type="js.com.cs.v1.Controls.Common.MyDOMElement">
        /// </param>
        /// <returns type="Object" domElement="true"></returns>
        if (Type.canCast(obj, js.com.cs.v1.Controls.Common.MyTableCellElement)) {
            throw new Error('Please use the InsertCell method as adding a cell via appendChild is not compatible with all browsers');
        }
        return js.com.cs.v1.Controls.Common.MyTableRowElement.callBase(this, 'appendChild', [ obj ]);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Common.MyUnOrderedListElem

js.com.cs.v1.Controls.Common.MyUnOrderedListElem = function js_com_cs_v1_Controls_Common_MyUnOrderedListElem(domElement) {
    /// <param name="domElement" type="Object" domElement="true">
    /// Either string or DOM Element
    /// </param>
    js.com.cs.v1.Controls.Common.MyUnOrderedListElem.constructBase(this, [ (isNullOrUndefined(domElement)) ? document.createElement('ul') : domElement ]);
}


Type.createNamespace('js.com.cs.v1.Controls.Common.ListingControl');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Common.ListingControl.Column

js.com.cs.v1.Controls.Common.ListingControl.Column = function js_com_cs_v1_Controls_Common_ListingControl_Column(text, width) {
    /// <param name="text" type="String">
    /// </param>
    /// <param name="width" type="String">
    /// </param>
    /// <field name="text" type="String">
    /// </field>
    /// <field name="width" type="String">
    /// </field>
    if (isNullOrUndefined(width)) {
        width = null;
    }
    this.text = text;
    this.width = width;
}
js.com.cs.v1.Controls.Common.ListingControl.Column.prototype = {
    text: null,
    width: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Common.ListingControl.Listing

js.com.cs.v1.Controls.Common.ListingControl.Listing = function js_com_cs_v1_Controls_Common_ListingControl_Listing(parent, height) {
    /// <param name="parent" type="js.com.cs.v1.Controls.Common.MyDOMElement">
    /// </param>
    /// <param name="height" type="String">
    /// </param>
    /// <field name="imageDeleteNormal" type="String">
    /// </field>
    /// <field name="imageDeleteOver" type="String">
    /// </field>
    /// <field name="classRowNormal" type="String">
    /// </field>
    /// <field name="classRowAlt" type="String">
    /// </field>
    /// <field name="classRowSelected" type="String">
    /// </field>
    /// <field name="classCell" type="String">
    /// </field>
    /// <field name="classAnchor" type="String">
    /// </field>
    /// <field name="classHeader" type="String">
    /// </field>
    /// <field name="noResultsText" type="String">
    /// </field>
    /// <field name="columns" type="js.com.cs.v1.General.Arrays.MyArray">
    /// Array of 'Column'
    /// </field>
    /// <field name="rowButtons" type="js.com.cs.v1.General.Arrays.MyArray">
    /// </field>
    /// <field name="domNode" type="js.com.cs.v1.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="dataSource" type="js.com.cs.v1.General.Arrays.MyArray">
    /// </field>
    /// <field name="listingItemRows" type="js.com.cs.v1.General.Arrays.MyArray">
    /// </field>
    /// <field name="_tbListing" type="js.com.cs.v1.Controls.Common.MyTableElement">
    /// </field>
    /// <field name="_parent" type="js.com.cs.v1.Controls.Common.MyDOMElement">
    /// </field>
    /// <field name="_tbListingContentPane" type="js.com.cs.v1.Controls.Dojo.Layout.MyContentPane">
    /// </field>
    /// <field name="_trMsg" type="js.com.cs.v1.Controls.Common.MyTableRowElement">
    /// </field>
    /// <field name="_tdMsg" type="js.com.cs.v1.Controls.Common.MyTableCellElement">
    /// </field>
    /// <field name="allowSelection" type="Boolean">
    /// </field>
    /// <field name="allowDelete" type="Boolean">
    /// </field>
    /// <field name="_Init" type="Boolean">
    /// </field>
    /// <field name="__itemDataBound" type="js.com.cs.v1.Controls.Common.ListingControl.ListingItemRowEventHandler">
    /// </field>
    /// <field name="__deleteItem" type="js.com.cs.v1.Controls.Common.ListingControl.ListingItemRowEventHandler">
    /// </field>
    this.rowButtons = new js.com.cs.v1.General.Arrays.MyArray();
    this.dataSource = new js.com.cs.v1.General.Arrays.MyArray();
    this.columns = new js.com.cs.v1.General.Arrays.MyArray();
    this.listingItemRows = new js.com.cs.v1.General.Arrays.MyArray();
    this._parent = parent;
    this._initDOMElements(height);
}
js.com.cs.v1.Controls.Common.ListingControl.Listing.prototype = {
    imageDeleteNormal: '/images/delete_up.gif',
    imageDeleteOver: '/images/delete_over.gif',
    classRowNormal: 'listing',
    classRowAlt: 'listing_alt',
    classRowSelected: 'listing_sel',
    classCell: 'listing',
    classAnchor: 'listing',
    classHeader: 'listingHeader',
    noResultsText: 'No results found',
    columns: null,
    rowButtons: null,
    domNode: null,
    dataSource: null,
    listingItemRows: null,
    _tbListing: null,
    _parent: null,
    _tbListingContentPane: null,
    _trMsg: null,
    _tdMsg: null,
    allowSelection: false,
    allowDelete: false,
    
    _initDOMElements: function js_com_cs_v1_Controls_Common_ListingControl_Listing$_initDOMElements(height) {
        /// <param name="height" type="String">
        /// </param>
        var contentPaneParams = {};
        this._tbListingContentPane = new js.com.cs.v1.Controls.Dojo.Layout.MyContentPane(contentPaneParams);
        this._parent.appendChild(this._tbListingContentPane.domElement);
        this.domNode = this._tbListingContentPane.domElement;
        if (height != null) {
            this.domNode.get_style().height = height;
        }
        this.domNode.addClass('listing');
        this._parent = this._parent;
        this._tbListing = new js.com.cs.v1.Controls.Common.MyTableElement();
        this._tbListingContentPane.appendChild(this._tbListing);
        this._tbListing.addClass('listing');
        this._tbListingContentPane.domElement.addClass('listing');
        this._trMsg = this._tbListing.insertRow(-1);
        this._tdMsg = this._trMsg.insertCell(-1);
        this._tbListingContentPane.createPane();
    },
    
    _initColumns: function js_com_cs_v1_Controls_Common_ListingControl_Listing$_initColumns() {
        var totCols = 1;
        if (this.columns.get_length() > 0) {
            totCols = this.columns.get_length();
            var trHead = this._tbListing.insertRow(1);
            for (var i = 0; i < this.columns.get_length(); i++) {
                var col = this.columns.get_item(i);
                var td = trHead.insertCell();
                td.addClass(this.classHeader);
                td.set_innerText(col.text);
                if (!String.isNullOrEmpty(col.width)) {
                    td.get_style().width = col.width;
                }
            }
        }
        this._tdMsg.set_colSpan(totCols);
        if (this.rowButtons.get_length() > 0) {
            this._tdMsg.set_colSpan(this._tdMsg.get_colSpan() + 1) - 1;
        }
    },
    
    _Init: false,
    
    _initDelete: function js_com_cs_v1_Controls_Common_ListingControl_Listing$_initDelete() {
        if (this.allowDelete) {
            var btnDelete = new js.com.cs.v1.Controls.Common.ListingControl.RowButton(this.imageDeleteNormal, this.imageDeleteOver, 'Delete Item', Delegate.create(this, this._listingItemDeleteHandler));
            this.addRowButton(btnDelete);
        }
    },
    
    _listingItemDeleteHandler: function js_com_cs_v1_Controls_Common_ListingControl_Listing$_listingItemDeleteHandler(row) {
        /// <param name="row" type="js.com.cs.v1.Controls.Common.ListingControl.ListingItemRow">
        /// </param>
        if (this.__deleteItem != null) {
            this.__deleteItem.invoke(row);
        }
    },
    
    init: function js_com_cs_v1_Controls_Common_ListingControl_Listing$init() {
        this._Init = true;
        this._initColumns();
        this._initDelete();
        if (this.__itemDataBound == null) {
            throw new Error('Listing:: Please attach to \'ItemDataBound\'');
        }
    },
    
    isLoading: function js_com_cs_v1_Controls_Common_ListingControl_Listing$isLoading() {
        this.clearListingItems();
        this._tbListing.isLoading();
    },
    
    addRowButton: function js_com_cs_v1_Controls_Common_ListingControl_Listing$addRowButton(btn) {
        /// <param name="btn" type="js.com.cs.v1.Controls.Common.ListingControl.RowButton">
        /// </param>
        this.rowButtons.push(btn);
    },
    
    isLoadingError: function js_com_cs_v1_Controls_Common_ListingControl_Listing$isLoadingError() {
        this.clearListingItems();
        this._tbListing.isLoadingError();
    },
    
    showMessage: function js_com_cs_v1_Controls_Common_ListingControl_Listing$showMessage(msg) {
        /// <param name="msg" type="String">
        /// </param>
        this._trMsg.get_style().display = '';
        this._tdMsg.set_innerHTML(msg);
    },
    
    hideMessage: function js_com_cs_v1_Controls_Common_ListingControl_Listing$hideMessage() {
        this._trMsg.get_style().display = 'none';
    },
    
    showNoResultsText: function js_com_cs_v1_Controls_Common_ListingControl_Listing$showNoResultsText() {
        this.showMessage('No results found');
    },
    
    clearListingItems: function js_com_cs_v1_Controls_Common_ListingControl_Listing$clearListingItems() {
        this._removeAllListingRows();
        this.dataSource = new js.com.cs.v1.General.Arrays.MyArray();
    },
    
    addColumn: function js_com_cs_v1_Controls_Common_ListingControl_Listing$addColumn(col) {
        /// <param name="col" type="js.com.cs.v1.Controls.Common.ListingControl.Column">
        /// </param>
        this.columns.push(col);
    },
    
    addDataSourceObject: function js_com_cs_v1_Controls_Common_ListingControl_Listing$addDataSourceObject(o) {
        /// <param name="o" type="Object">
        /// </param>
        this.dataSource.push(o);
    },
    
    _unselectAllRows: function js_com_cs_v1_Controls_Common_ListingControl_Listing$_unselectAllRows() {
        for (var i = 0; i < this.listingItemRows.get_length(); i++) {
            var row = this.listingItemRows.get_item(i);
            row.unSelect();
        }
    },
    
    _removeAllListingRows: function js_com_cs_v1_Controls_Common_ListingControl_Listing$_removeAllListingRows() {
        for (var i = 0; i < this.listingItemRows.get_length(); i++) {
            var item = this.listingItemRows.get_item(i);
            if (item.tr.get_rowIndex() !== -1) {
                this._tbListing.deleteRow(item.tr.get_rowIndex());
            }
        }
        this.listingItemRows = new js.com.cs.v1.General.Arrays.MyArray();
    },
    
    render: function js_com_cs_v1_Controls_Common_ListingControl_Listing$render() {
        if (!this._Init) {
            this.init();
        }
        this.hideMessage();
        this._tbListing.isFinishedLoading();
        this._removeAllListingRows();
        var alt = false;
        for (var i = 0; i < this.dataSource.get_length(); i++) {
            var tr = this._tbListing.insertRow();
            var item = this.dataSource.get_item(i);
            var itemRow = new js.com.cs.v1.Controls.Common.ListingControl.ListingItemRow(this, item, tr, alt);
            this.__itemDataBound.invoke(itemRow);
            this.listingItemRows.push(itemRow);
            alt = !alt;
        }
        if (this.dataSource.get_length() === 0) {
            this.showMessage(this.noResultsText);
        }
    },
    
    add_itemDataBound: function js_com_cs_v1_Controls_Common_ListingControl_Listing$add_itemDataBound(value) {
        /// <param name="value" type="Function" />
        this.__itemDataBound = Delegate.combine(this.__itemDataBound, value);
    },
    remove_itemDataBound: function js_com_cs_v1_Controls_Common_ListingControl_Listing$remove_itemDataBound(value) {
        /// <param name="value" type="Function" />
        this.__itemDataBound = Delegate.remove(this.__itemDataBound, value);
    },
    
    __itemDataBound: null,
    
    add_deleteItem: function js_com_cs_v1_Controls_Common_ListingControl_Listing$add_deleteItem(value) {
        /// <param name="value" type="Function" />
        this.__deleteItem = Delegate.combine(this.__deleteItem, value);
    },
    remove_deleteItem: function js_com_cs_v1_Controls_Common_ListingControl_Listing$remove_deleteItem(value) {
        /// <param name="value" type="Function" />
        this.__deleteItem = Delegate.remove(this.__deleteItem, value);
    },
    
    __deleteItem: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Common.ListingControl.ListingItemRow

js.com.cs.v1.Controls.Common.ListingControl.ListingItemRow = function js_com_cs_v1_Controls_Common_ListingControl_ListingItemRow(listing, Item, tr, isAlternating) {
    /// <param name="listing" type="js.com.cs.v1.Controls.Common.ListingControl.Listing">
    /// </param>
    /// <param name="Item" type="Object">
    /// </param>
    /// <param name="tr" type="js.com.cs.v1.Controls.Common.MyTableRowElement">
    /// </param>
    /// <param name="isAlternating" type="Boolean">
    /// </param>
    /// <field name="_listing" type="js.com.cs.v1.Controls.Common.ListingControl.Listing">
    /// </field>
    /// <field name="isSelected" type="Boolean">
    /// </field>
    /// <field name="isAlternating" type="Boolean">
    /// </field>
    /// <field name="tr" type="js.com.cs.v1.Controls.Common.MyTableRowElement">
    /// </field>
    /// <field name="item" type="Object">
    /// </field>
    /// <field name="tag" type="Object">
    /// </field>
    /// <field name="tag2" type="Object">
    /// </field>
    /// <field name="tag3" type="Object">
    /// </field>
    /// <field name="cellContent" type="Array" elementType="MyTableCellElement">
    /// </field>
    /// <field name="__onMouseDown" type="js.com.cs.v1.Controls.Common.ListingControl.ListingItemRowEventHandler">
    /// </field>
    this.tr = tr;
    this._listing = listing;
    this.item = Item;
    this.isAlternating = isAlternating;
    this._initContents();
}
js.com.cs.v1.Controls.Common.ListingControl.ListingItemRow.prototype = {
    _listing: null,
    
    _initContents: function js_com_cs_v1_Controls_Common_ListingControl_ListingItemRow$_initContents() {
        this.cellContent = [];
        for (var i = 0; i < this._listing.columns.get_length() || i === 0; i++) {
            this.cellContent[i] = this.tr.insertCell();
            this.cellContent[i].addClass(this._listing.classCell);
        }
        if (this._listing.rowButtons.get_length() > 0) {
            var td = this.tr.insertCell();
            td.addClass('buttons');
            var tb = new js.com.cs.v1.Controls.Common.MyTableElement();
            td.appendChild(tb);
            tb.addClass('buttons');
            var trButtons = tb.insertRow();
            trButtons.addClass('buttons');
            for (var i = 0; i < this._listing.rowButtons.get_length(); i++) {
                var rowButton = this._listing.rowButtons.get_item(i);
                var rowButtonInstance = rowButton._getRowButtonInstance(this);
                var tdButton = trButtons.insertCell();
                var imgButton = new js.com.cs.v1.Controls.Common.MyImageElement();
                tdButton.appendChild(imgButton);
                imgButton.set_src(rowButton.imageNormal);
                imgButton.set_alt(rowButton.alternateText);
                imgButton.add_onMouseDown(Delegate.create(rowButtonInstance, rowButtonInstance._imgButton_onMouseDown));
            }
        }
        this.tr.add_onMouseDown(Delegate.create(this, this._tr_onMouseDown));
        this._resetClassName();
    },
    
    _tr_onMouseDown: function js_com_cs_v1_Controls_Common_ListingControl_ListingItemRow$_tr_onMouseDown() {
        if (this._listing.allowSelection) {
            this.select();
        }
        if (this.__onMouseDown != null) {
            this.__onMouseDown.invoke(this);
        }
    },
    
    isSelected: false,
    isAlternating: false,
    tr: null,
    item: null,
    tag: null,
    tag2: null,
    tag3: null,
    cellContent: null,
    
    add_onMouseDown: function js_com_cs_v1_Controls_Common_ListingControl_ListingItemRow$add_onMouseDown(value) {
        /// <param name="value" type="Function" />
        this.__onMouseDown = Delegate.combine(this.__onMouseDown, value);
    },
    remove_onMouseDown: function js_com_cs_v1_Controls_Common_ListingControl_ListingItemRow$remove_onMouseDown(value) {
        /// <param name="value" type="Function" />
        this.__onMouseDown = Delegate.remove(this.__onMouseDown, value);
    },
    
    __onMouseDown: null,
    
    _resetClassName: function js_com_cs_v1_Controls_Common_ListingControl_ListingItemRow$_resetClassName() {
        this.tr.removeClass(this._listing.classRowNormal);
        this.tr.removeClass(this._listing.classRowSelected);
        this.tr.removeClass(this._listing.classRowAlt);
        this.tr.addClass((!this.isAlternating) ? this._listing.classRowNormal : this._listing.classRowAlt);
    },
    
    unSelect: function js_com_cs_v1_Controls_Common_ListingControl_ListingItemRow$unSelect() {
        this.isSelected = false;
        this._resetClassName();
    },
    
    select: function js_com_cs_v1_Controls_Common_ListingControl_ListingItemRow$select() {
        this._listing._unselectAllRows();
        this.isSelected = true;
        this.tr.addClass(this._listing.classRowSelected);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Common.ListingControl._rowButtonInstance

js.com.cs.v1.Controls.Common.ListingControl._rowButtonInstance = function js_com_cs_v1_Controls_Common_ListingControl__rowButtonInstance() {
    /// <field name="rowButton" type="js.com.cs.v1.Controls.Common.ListingControl.RowButton">
    /// </field>
    /// <field name="row" type="js.com.cs.v1.Controls.Common.ListingControl.ListingItemRow">
    /// </field>
}
js.com.cs.v1.Controls.Common.ListingControl._rowButtonInstance.prototype = {
    rowButton: null,
    row: null,
    
    _imgButton_onMouseDown: function js_com_cs_v1_Controls_Common_ListingControl__rowButtonInstance$_imgButton_onMouseDown() {
        this.rowButton._callClickHandler(this.row);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Common.ListingControl.RowButton

js.com.cs.v1.Controls.Common.ListingControl.RowButton = function js_com_cs_v1_Controls_Common_ListingControl_RowButton(imageNormal, imageOver, altText, clickHandler) {
    /// <param name="imageNormal" type="String">
    /// </param>
    /// <param name="imageOver" type="String">
    /// </param>
    /// <param name="altText" type="String">
    /// </param>
    /// <param name="clickHandler" type="js.com.cs.v1.Controls.Common.ListingControl.ListingItemRowEventHandler">
    /// </param>
    /// <field name="imageNormal" type="String">
    /// </field>
    /// <field name="imageOver" type="String">
    /// </field>
    /// <field name="alternateText" type="String">
    /// </field>
    /// <field name="__clickHandler" type="js.com.cs.v1.Controls.Common.ListingControl.ListingItemRowEventHandler">
    /// </field>
    this.imageNormal = imageNormal;
    this.imageOver = imageOver;
    this.alternateText = altText;
    this.__clickHandler = clickHandler;
}
js.com.cs.v1.Controls.Common.ListingControl.RowButton.prototype = {
    imageNormal: null,
    imageOver: null,
    alternateText: null,
    
    add_clickHandler: function js_com_cs_v1_Controls_Common_ListingControl_RowButton$add_clickHandler(value) {
        /// <param name="value" type="Function" />
        this.__clickHandler = Delegate.combine(this.__clickHandler, value);
    },
    remove_clickHandler: function js_com_cs_v1_Controls_Common_ListingControl_RowButton$remove_clickHandler(value) {
        /// <param name="value" type="Function" />
        this.__clickHandler = Delegate.remove(this.__clickHandler, value);
    },
    
    __clickHandler: null,
    
    _getRowButtonInstance: function js_com_cs_v1_Controls_Common_ListingControl_RowButton$_getRowButtonInstance(row) {
        /// <param name="row" type="js.com.cs.v1.Controls.Common.ListingControl.ListingItemRow">
        /// </param>
        /// <returns type="js.com.cs.v1.Controls.Common.ListingControl._rowButtonInstance"></returns>
        var b = new js.com.cs.v1.Controls.Common.ListingControl._rowButtonInstance();
        b.row = row;
        b.rowButton = this;
        return b;
    },
    
    _callClickHandler: function js_com_cs_v1_Controls_Common_ListingControl_RowButton$_callClickHandler(row) {
        /// <param name="row" type="js.com.cs.v1.Controls.Common.ListingControl.ListingItemRow">
        /// </param>
        if (this.__clickHandler != null) {
            this.__clickHandler.invoke(row);
        }
    }
}


Type.createNamespace('js.com.cs.v1.Controls.Dojo.Form');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Dojo.Form.MyHorizontalRuleLabels

js.com.cs.v1.Controls.Dojo.Form.MyHorizontalRuleLabels = function js_com_cs_v1_Controls_Dojo_Form_MyHorizontalRuleLabels(p) {
    /// <param name="p" type="js.org.Dijit.DijitObjects.form.__HorizontalRuleLabelParams">
    /// </param>
    /// <field name="ol" type="Object" domElement="true">
    /// </field>
    /// <field name="parameters" type="js.org.Dijit.DijitObjects.form.__HorizontalRuleLabelParams">
    /// </field>
    /// <field name="container" type="String">
    /// </field>
    this.parameters = p;
    this.ol = document.createElement('ol');
    this.container = 'bottomContainer';
}
js.com.cs.v1.Controls.Dojo.Form.MyHorizontalRuleLabels.prototype = {
    ol: null,
    parameters: null,
    container: null,
    
    addLabel: function js_com_cs_v1_Controls_Dojo_Form_MyHorizontalRuleLabels$addLabel(html) {
        /// <param name="html" type="String">
        /// </param>
        var li = document.createElement('li');
        li.innerHTML = html;
        this.ol.appendChild(li);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Dojo.Form.MyHorizontalSlider

js.com.cs.v1.Controls.Dojo.Form.MyHorizontalSlider = function js_com_cs_v1_Controls_Dojo_Form_MyHorizontalSlider(p, domElement) {
    /// <param name="p" type="js.org.Dijit.DijitObjects.form.__SliderParams">
    /// </param>
    /// <param name="domElement" type="js.com.cs.v1.Controls.Common.MyDivElement">
    /// </param>
    /// <field name="domElement" type="js.com.cs.v1.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="parameters" type="js.org.Dijit.DijitObjects.form.__SliderParams">
    /// </field>
    /// <field name="rules" type="Array">
    /// </field>
    /// <field name="ruleLabels" type="Array">
    /// </field>
    /// <field name="slider" type="dijit.form.HorizontalSlider">
    /// </field>
    this.domElement = domElement;
    this.rules = [];
    this.ruleLabels = [];
    this.parameters = p;
}
js.com.cs.v1.Controls.Dojo.Form.MyHorizontalSlider.prototype = {
    domElement: null,
    parameters: null,
    rules: null,
    ruleLabels: null,
    slider: null,
    
    setValueToCenter: function js_com_cs_v1_Controls_Dojo_Form_MyHorizontalSlider$setValueToCenter() {
        var val = this.slider.maximum - ((this.slider.maximum - this.slider.minimum) / 2);
        this.setValue(val);
    },
    
    setValue: function js_com_cs_v1_Controls_Dojo_Form_MyHorizontalSlider$setValue(value) {
        /// <param name="value" type="Number">
        /// </param>
        this.slider.setValue(value);
    },
    
    get_value: function js_com_cs_v1_Controls_Dojo_Form_MyHorizontalSlider$get_value() {
        /// <value type="String"></value>
        return this.slider.value;
    },
    set_value: function js_com_cs_v1_Controls_Dojo_Form_MyHorizontalSlider$set_value(value) {
        /// <value type="String"></value>
        this.slider.value = value;
        return value;
    },
    
    addHorizontalRule: function js_com_cs_v1_Controls_Dojo_Form_MyHorizontalSlider$addHorizontalRule(p) {
        /// <param name="p" type="js.org.Dijit.DijitObjects.form.__HorizontalRuleParams">
        /// </param>
        var div = document.createElement('div');
        this.domElement.appendChild(div);
        var horizRule = new dijit.form.HorizontalRule(p, div);
        this.rules[this.rules.length] = horizRule;
    },
    
    addHorizontalRuleLabels: function js_com_cs_v1_Controls_Dojo_Form_MyHorizontalSlider$addHorizontalRuleLabels(labels) {
        /// <param name="labels" type="js.com.cs.v1.Controls.Dojo.Form.MyHorizontalRuleLabels">
        /// </param>
        this.domElement.appendChild(labels.ol);
        var horizRule = new dijit.form.HorizontalRuleLabels(labels.parameters, labels.ol);
        this.ruleLabels[this.ruleLabels.length] = horizRule;
    },
    
    startup: function js_com_cs_v1_Controls_Dojo_Form_MyHorizontalSlider$startup() {
        this.slider = new dijit.form.HorizontalSlider(this.parameters, this.domElement.domElement);
        this.slider.startup();
        for (var i = 0; i < this.ruleLabels.length; i++) {
            var rule = this.ruleLabels[i];
            rule.startup();
        }
        for (var i = 0; i < this.rules.length; i++) {
            var rule = this.rules[i];
            rule.startup();
        }
    }
}


Type.createNamespace('js.com.cs.v1.Controls.Dojo.Layout');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Dojo.Layout.MyContentPane

js.com.cs.v1.Controls.Dojo.Layout.MyContentPane = function js_com_cs_v1_Controls_Dojo_Layout_MyContentPane(p, domElement) {
    /// <param name="p" type="js.org.Dijit.DijitObjects.layout.__ContentPaneParams">
    /// </param>
    /// <param name="domElement" type="js.com.cs.v1.Controls.Common.MyDivElement">
    /// </param>
    /// <field name="domElement" type="js.com.cs.v1.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_contentPane" type="dijit.layout.ContentPane">
    /// </field>
    /// <field name="_parameters" type="js.org.Dijit.DijitObjects.layout.__ContentPaneParams">
    /// </field>
    if (domElement == null) {
        domElement = new js.com.cs.v1.Controls.Common.MyDivElement();
    }
    else if (Type.canCast(domElement, String)) {
        domElement = new js.com.cs.v1.Controls.Common.MyDivElement(domElement);
    }
    this.domElement = domElement;
    this._parameters = p;
}
js.com.cs.v1.Controls.Dojo.Layout.MyContentPane.prototype = {
    domElement: null,
    _contentPane: null,
    _parameters: null,
    
    appendChild: function js_com_cs_v1_Controls_Dojo_Layout_MyContentPane$appendChild(domElement) {
        /// <param name="domElement" type="js.com.cs.v1.Controls.Common.MyDOMElement">
        /// </param>
        if (Type.canCast(domElement, js.com.cs.v1.Controls.Common.MyDOMElement)) {
            this.domElement.appendChild(domElement.domElement);
        }
        else {
            this.domElement.appendChild(domElement.domElement);
        }
    },
    
    createPane: function js_com_cs_v1_Controls_Dojo_Layout_MyContentPane$createPane() {
        this._contentPane = new dijit.layout.ContentPane(this._parameters, this.domElement.domElement);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Dojo.Layout.MySplitContainer

js.com.cs.v1.Controls.Dojo.Layout.MySplitContainer = function js_com_cs_v1_Controls_Dojo_Layout_MySplitContainer(p, domElement) {
    /// <param name="p" type="js.org.Dijit.DijitObjects.layout.__SplitContainerParams">
    /// </param>
    /// <param name="domElement" type="js.com.cs.v1.Controls.Common.MyDivElement">
    /// </param>
    /// <field name="parameters" type="js.org.Dijit.DijitObjects.layout.__SplitContainerParams">
    /// </field>
    /// <field name="domElement" type="js.com.cs.v1.Controls.Common.MyDivElement">
    /// </field>
    this.domElement = domElement;
    this.parameters = p;
}
js.com.cs.v1.Controls.Dojo.Layout.MySplitContainer.prototype = {
    parameters: null,
    domElement: null
}


Type.createNamespace('js.com.cs.v1.Controls.Form.Enums');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Form.Enums.FORM_CONTROL_TYPE

js.com.cs.v1.Controls.Form.Enums.FORM_CONTROL_TYPE = function() { 
    /// <field name="checkBox" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="textBoxSingleLine" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="radioButton" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="textArea" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="select" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="button" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="textBoxMultiLine" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="textBoxHidden" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="textBoxPassword" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="fileUpload" type="Number" integer="true" static="true">
    /// </field>
};
js.com.cs.v1.Controls.Form.Enums.FORM_CONTROL_TYPE.prototype = {
    checkBox: 0, 
    textBoxSingleLine: 1, 
    radioButton: 2, 
    textArea: 3, 
    select: 4, 
    button: 5, 
    textBoxMultiLine: 7, 
    textBoxHidden: 8, 
    textBoxPassword: 9, 
    fileUpload: 10
}
js.com.cs.v1.Controls.Form.Enums.FORM_CONTROL_TYPE.createEnum('js.com.cs.v1.Controls.Form.Enums.FORM_CONTROL_TYPE', false);


Type.createNamespace('js.com.cs.v1.Controls.Form');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Form.IMyBaseFormElement

js.com.cs.v1.Controls.Form.IMyBaseFormElement = function() { 
};
js.com.cs.v1.Controls.Form.IMyBaseFormElement.prototype = {
    get_myDomElement : null,
    get_controlType : null,
    get_disabled : null,
    set_disabled : null,
    enable : null,
    disable : null,
    focus : null,
    blur : null,
    clear : null,
    getFieldFromFormsCollection : null,
    add_onChange : null,
    remove_onChange : null,
    get_valueObject : null,
    set_valueObject : null,
    createFieldForFormElement : null
}
js.com.cs.v1.Controls.Form.IMyBaseFormElement.createInterface('js.com.cs.v1.Controls.Form.IMyBaseFormElement');


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Form.IMyButtonElement

js.com.cs.v1.Controls.Form.IMyButtonElement = function() { 
};
js.com.cs.v1.Controls.Form.IMyButtonElement.prototype = {
    performClick : null,
    createButtonForFormElement : null
}
js.com.cs.v1.Controls.Form.IMyButtonElement.createInterface('js.com.cs.v1.Controls.Form.IMyButtonElement');


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Form.MyBaseButton

js.com.cs.v1.Controls.Form.MyBaseButton = function js_com_cs_v1_Controls_Form_MyBaseButton(dom) {
    /// <param name="dom" type="Object" domElement="true">
    /// </param>
    js.com.cs.v1.Controls.Form.MyBaseButton.constructBase(this, [ dom ]);
}
js.com.cs.v1.Controls.Form.MyBaseButton.prototype = {
    
    createButtonForFormElement: function js_com_cs_v1_Controls_Form_MyBaseButton$createButtonForFormElement(validateFormOnClick, validationGroup, isDefaultButton, confirmMsg) {
        /// <param name="validateFormOnClick" type="Boolean">
        /// </param>
        /// <param name="validationGroup" type="String">
        /// </param>
        /// <param name="isDefaultButton" type="Boolean">
        /// </param>
        /// <param name="confirmMsg" type="String">
        /// </param>
        /// <returns type="js.com.cs.v1.UI.Forms.Button"></returns>
        var btn = new js.com.cs.v1.UI.Forms.Button(this.domElement, validateFormOnClick, validationGroup, isDefaultButton, confirmMsg);
        return btn;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Form.MyBaseFormElement

js.com.cs.v1.Controls.Form.MyBaseFormElement = function js_com_cs_v1_Controls_Form_MyBaseFormElement(dom) {
    /// <param name="dom" type="js.com.cs.v1.Controls.Common.MyDOMElement">
    /// </param>
    js.com.cs.v1.Controls.Form.MyBaseFormElement.constructBase(this, [ dom ]);
}
js.com.cs.v1.Controls.Form.MyBaseFormElement.getFormElement = function js_com_cs_v1_Controls_Form_MyBaseFormElement$getFormElement(elementID) {
    /// <summary>
    /// Gets the form element based on the element ID
    /// </summary>
    /// <param name="elementID" type="Object" domElement="true">
    /// </param>
    /// <returns type="js.com.cs.v1.Controls.Form.IMyBaseFormElement"></returns>
    if (Type.canCast(elementID, String)) {
        elementID = document.getElementById(elementID);
    }
    var domElement = elementID;
    var tagName = domElement.tagName.toLowerCase();
    var attribType = '';
    if (domElement.attributes.getNamedItem('type') != null) {
        attribType = domElement.attributes.getNamedItem('type').value.toLowerCase();
    }
    var formElem = null;
    switch (tagName) {
        case 'input':
            var txt = js.com.cs.v1.Controls.Form.MyTextBox.getTextBoxFromElement(domElement);
            if (txt == null) {
                switch (attribType) {
                    case 'checkbox':
                        var chk = new js.com.cs.v1.Controls.Form.MyCheckBox(domElement);
                        formElem = chk;
                        break;
                    case 'file':
                        var fu = new js.com.cs.v1.Controls.Form.MyFileUpload(domElement);
                        formElem = fu;
                        break;
                    case 'radio':
                        var radio = new js.com.cs.v1.Controls.Form.MyRadioButton(domElement);
                        formElem = radio;
                        break;
                }
            }
            else {
                formElem = txt;
            }
            break;
        case 'textarea':
            var txt = new js.com.cs.v1.Controls.Form.MyTextBoxMultiLine(domElement);
            formElem = txt;
            break;
        case 'select':
            var cmb = new js.com.cs.v1.Controls.Form.MyDropDownList(domElement);
            formElem = cmb;
            break;
    }
    return formElem;
}
js.com.cs.v1.Controls.Form.MyBaseFormElement.prototype = {
    
    getFieldFromFormsCollection: function js_com_cs_v1_Controls_Form_MyBaseFormElement$getFieldFromFormsCollection() {
        /// <returns type="js.com.cs.v1.UI.Forms.Field"></returns>
        return js.com.cs.v1.UI.Forms.FormsCollection.get_instance().getFieldByID(this.get_id());
    },
    
    createFieldForFormElement: function js_com_cs_v1_Controls_Form_MyBaseFormElement$createFieldForFormElement(title, validationParams, validationGroup, customCSSClasses, groupParams) {
        /// <param name="title" type="String">
        /// </param>
        /// <param name="validationParams" type="js.com.cs.v1.Forms.Validation.VALIDATION_PARAMETERS">
        /// </param>
        /// <param name="validationGroup" type="String">
        /// </param>
        /// <param name="customCSSClasses" type="js.com.cs.v1.UI.Forms.DefaultCSSClasses">
        /// </param>
        /// <param name="groupParams" type="js.com.cs.v1.UI.Forms.FIELDGROUP_PARAMETERS">
        /// </param>
        /// <returns type="js.com.cs.v1.UI.Forms.Field"></returns>
        var field = new js.com.cs.v1.UI.Forms.Field(this.domElement, title, validationParams, validationGroup, customCSSClasses, groupParams);
        return field;
    },
    
    get_text: function js_com_cs_v1_Controls_Form_MyBaseFormElement$get_text() {
        /// <value type="String"></value>
        return this.get_value();
    },
    set_text: function js_com_cs_v1_Controls_Form_MyBaseFormElement$set_text(value) {
        /// <value type="String"></value>
        this.set_value(value);
        return value;
    },
    
    get_value: function js_com_cs_v1_Controls_Form_MyBaseFormElement$get_value() {
        /// <value type="String"></value>
        return this.domElement.value;
    },
    set_value: function js_com_cs_v1_Controls_Form_MyBaseFormElement$set_value(value) {
        /// <value type="String"></value>
        this.domElement.value = value;
        return value;
    },
    
    get_valueObject: function js_com_cs_v1_Controls_Form_MyBaseFormElement$get_valueObject() {
        /// <value type="Object"></value>
        return this.get_value();
    },
    set_valueObject: function js_com_cs_v1_Controls_Form_MyBaseFormElement$set_valueObject(value) {
        /// <value type="Object"></value>
        this.set_value(value);
        return value;
    },
    
    add_onChange: function js_com_cs_v1_Controls_Form_MyBaseFormElement$add_onChange(value) {
        /// <param name="value" type="Function" />
        this.domElement.attachEvent('onchange', value);
    },
    remove_onChange: function js_com_cs_v1_Controls_Form_MyBaseFormElement$remove_onChange(value) {
        /// <param name="value" type="Function" />
        this.domElement.detachEvent('onchange', value);
    },
    
    clear: function js_com_cs_v1_Controls_Form_MyBaseFormElement$clear() {
        this.set_value('');
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Form.MyButton

js.com.cs.v1.Controls.Form.MyButton = function js_com_cs_v1_Controls_Form_MyButton(btn) {
    /// <param name="btn" type="Object" domElement="true">
    /// </param>
    /// <field name="domElement" type="Object" domElement="true">
    /// </field>
    js.com.cs.v1.Controls.Form.MyButton.constructBase(this, [ (isNullOrUndefined(btn)) ? document.createElement('input') : btn ]);
    this.domElement.type = 'button';
}
js.com.cs.v1.Controls.Form.MyButton.prototype = {
    domElement: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Form.MyCheckBox

js.com.cs.v1.Controls.Form.MyCheckBox = function js_com_cs_v1_Controls_Form_MyCheckBox(chk) {
    /// <param name="chk" type="Object" domElement="true">
    /// </param>
    /// <field name="domElement" type="Object" domElement="true">
    /// </field>
    js.com.cs.v1.Controls.Form.MyCheckBox.constructBase(this, [ (isNullOrUndefined(chk)) ? document.createElement('input') : chk ]);
    this.domElement.type = 'checkbox';
}
js.com.cs.v1.Controls.Form.MyCheckBox.prototype = {
    domElement: null,
    
    get_checked: function js_com_cs_v1_Controls_Form_MyCheckBox$get_checked() {
        /// <value type="Boolean"></value>
        return this.domElement.checked;
    },
    set_checked: function js_com_cs_v1_Controls_Form_MyCheckBox$set_checked(value) {
        /// <value type="Boolean"></value>
        this.domElement.checked = value;
        return value;
    },
    
    clear: function js_com_cs_v1_Controls_Form_MyCheckBox$clear() {
        this.domElement.checked = false;
    },
    
    get_value: function js_com_cs_v1_Controls_Form_MyCheckBox$get_value() {
        /// <value type="Boolean"></value>
        return this.get_checked();
    },
    set_value: function js_com_cs_v1_Controls_Form_MyCheckBox$set_value(value) {
        /// <value type="Boolean"></value>
        var val = value;
        if (Type.canCast(value, String)) {
            val = !String.isNullOrEmpty((value));
        }
        else if (Type.canCast(val, Number)) {
            val = (val) !== 0;
        }
        this.set_checked(val);
        return value;
    },
    
    get_controlType: function js_com_cs_v1_Controls_Form_MyCheckBox$get_controlType() {
        /// <value type="js.com.cs.v1.Controls.Form.Enums.FORM_CONTROL_TYPE"></value>
        return js.com.cs.v1.Controls.Form.Enums.FORM_CONTROL_TYPE.checkBox;
    },
    
    get_valueObject: function js_com_cs_v1_Controls_Form_MyCheckBox$get_valueObject() {
        /// <value type="Object"></value>
        return this.get_checked();
    },
    set_valueObject: function js_com_cs_v1_Controls_Form_MyCheckBox$set_valueObject(value) {
        /// <value type="Object"></value>
        this.set_checked(value);
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Form.MyDropDownList

js.com.cs.v1.Controls.Form.MyDropDownList = function js_com_cs_v1_Controls_Form_MyDropDownList(txt) {
    /// <param name="txt" type="Object" domElement="true">
    /// </param>
    /// <field name="domElement" type="Object" domElement="true">
    /// </field>
    js.com.cs.v1.Controls.Form.MyDropDownList.constructBase(this, [ (isNullOrUndefined(txt)) ? document.createElement('select') : txt ]);
}
js.com.cs.v1.Controls.Form.MyDropDownList.prototype = {
    domElement: null,
    
    get_selectedIndex: function js_com_cs_v1_Controls_Form_MyDropDownList$get_selectedIndex() {
        /// <value type="Number" integer="true"></value>
        return this.domElement.selectedIndex;
    },
    set_selectedIndex: function js_com_cs_v1_Controls_Form_MyDropDownList$set_selectedIndex(value) {
        /// <value type="Number" integer="true"></value>
        this.domElement.selectedIndex = value;
        return value;
    },
    
    clearItems: function js_com_cs_v1_Controls_Form_MyDropDownList$clearItems() {
        var origLen = this.domElement.options.length;
        for (var i = 0; i < origLen; i++) {
            this.domElement.remove(0);
        }
    },
    
    removeItem: function js_com_cs_v1_Controls_Form_MyDropDownList$removeItem(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        this.domElement.remove(index);
    },
    
    addItem: function js_com_cs_v1_Controls_Form_MyDropDownList$addItem(txt, value) {
        /// <param name="txt" type="String">
        /// </param>
        /// <param name="value" type="String">
        /// </param>
        if (isNullOrUndefined(value)) {
            value = txt;
        }
        var elem = document.createElement('option');
        elem.value = value;
        elem.text = txt;
        try {
            this.domElement.add(elem, null);
        }
        catch (ex) {
            var a = this.domElement.options;
            a[a.length] = elem;
        }
    },
    
    addItemFromOption: function js_com_cs_v1_Controls_Form_MyDropDownList$addItemFromOption(option) {
        /// <param name="option" type="Object" domElement="true">
        /// </param>
        this.addItem(option.text, option.value);
    },
    
    get_options: function js_com_cs_v1_Controls_Form_MyDropDownList$get_options() {
        /// <value type="DOMElementCollection"></value>
        return this.domElement.options;
    },
    
    callChange: function js_com_cs_v1_Controls_Form_MyDropDownList$callChange() {
        var obj = this.onchange;
        if (obj != null) {
            this.onchange();
        }
    },
    
    get_controlType: function js_com_cs_v1_Controls_Form_MyDropDownList$get_controlType() {
        /// <value type="js.com.cs.v1.Controls.Form.Enums.FORM_CONTROL_TYPE"></value>
        return js.com.cs.v1.Controls.Form.Enums.FORM_CONTROL_TYPE.select;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Form.MyFileUpload

js.com.cs.v1.Controls.Form.MyFileUpload = function js_com_cs_v1_Controls_Form_MyFileUpload(txt) {
    /// <param name="txt" type="Object" domElement="true">
    /// </param>
    /// <field name="domElement" type="Object" domElement="true">
    /// </field>
    js.com.cs.v1.Controls.Form.MyFileUpload.constructBase(this, [ (isNullOrUndefined(txt)) ? document.createElement('input') : txt ]);
    this.domElement.type = 'file';
}
js.com.cs.v1.Controls.Form.MyFileUpload.prototype = {
    domElement: null,
    
    get_controlType: function js_com_cs_v1_Controls_Form_MyFileUpload$get_controlType() {
        /// <value type="js.com.cs.v1.Controls.Form.Enums.FORM_CONTROL_TYPE"></value>
        return js.com.cs.v1.Controls.Form.Enums.FORM_CONTROL_TYPE.fileUpload;
    },
    
    get_valueObject: function js_com_cs_v1_Controls_Form_MyFileUpload$get_valueObject() {
        /// <value type="Object"></value>
        return this.get_value();
    },
    set_valueObject: function js_com_cs_v1_Controls_Form_MyFileUpload$set_valueObject(value) {
        /// <value type="Object"></value>
        this.set_value(value);
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Form.MyRadioButton

js.com.cs.v1.Controls.Form.MyRadioButton = function js_com_cs_v1_Controls_Form_MyRadioButton(radioButton) {
    /// <param name="radioButton" type="Object" domElement="true">
    /// </param>
    /// <field name="domElement" type="Object" domElement="true">
    /// </field>
    js.com.cs.v1.Controls.Form.MyRadioButton.constructBase(this, [ (isNullOrUndefined(radioButton)) ? document.createElement('input') : radioButton ]);
    this.domElement.type = 'radio';
}
js.com.cs.v1.Controls.Form.MyRadioButton.prototype = {
    domElement: null,
    
    get_checked: function js_com_cs_v1_Controls_Form_MyRadioButton$get_checked() {
        /// <value type="Boolean"></value>
        return this.domElement.checked;
    },
    set_checked: function js_com_cs_v1_Controls_Form_MyRadioButton$set_checked(value) {
        /// <value type="Boolean"></value>
        this.domElement.checked = value;
        return value;
    },
    
    clear: function js_com_cs_v1_Controls_Form_MyRadioButton$clear() {
        this.domElement.checked = false;
    },
    
    get_controlType: function js_com_cs_v1_Controls_Form_MyRadioButton$get_controlType() {
        /// <value type="js.com.cs.v1.Controls.Form.Enums.FORM_CONTROL_TYPE"></value>
        return js.com.cs.v1.Controls.Form.Enums.FORM_CONTROL_TYPE.radioButton;
    },
    
    get_valueObject: function js_com_cs_v1_Controls_Form_MyRadioButton$get_valueObject() {
        /// <value type="Object"></value>
        return this.get_checked();
    },
    set_valueObject: function js_com_cs_v1_Controls_Form_MyRadioButton$set_valueObject(value) {
        /// <value type="Object"></value>
        this.set_checked(value);
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Form.MyTextBox

js.com.cs.v1.Controls.Form.MyTextBox = function js_com_cs_v1_Controls_Form_MyTextBox(txt, type) {
    /// <param name="txt" type="Object" domElement="true">
    /// </param>
    /// <param name="type" type="String">
    /// </param>
    /// <field name="domElement" type="Object" domElement="true">
    /// </field>
    js.com.cs.v1.Controls.Form.MyTextBox.constructBase(this, [ txt ]);
    if (type != null && this.domElement.type !== type) {
        if (dojoClass.isIE > 0 && this.domElement.parentNode != null) {
            var e = document.createElement('input');
            e.type = type;
            dojoClass.place(e, this.domElement, 'before');
            this.domElement.parentNode.removeChild(this.domElement);
            e.id = this.domElement.id;
            this.domElement = null;
            this.domElement = e;
        }
        else {
            this.domElement.type = type;
        }
    }
}
js.com.cs.v1.Controls.Form.MyTextBox.getTextBoxFromElement = function js_com_cs_v1_Controls_Form_MyTextBox$getTextBoxFromElement(element) {
    /// <param name="element" type="js.com.cs.v1.Controls.Common.MyDOMElement">
    /// </param>
    /// <returns type="js.com.cs.v1.Controls.Form.MyTextBox"></returns>
    element = js.com.cs.v1.Controls.Common.MyDOMElement.getElement(element);
    var txt = null;
    if (element != null) {
        if (element.get_tagName() === 'input') {
            switch (element.get_tagType()) {
                case 'hidden':
                    txt = new js.com.cs.v1.Controls.Form.MyTextBoxHidden(element.domElement);
                    break;
                case 'password':
                    txt = new js.com.cs.v1.Controls.Form.MyTextBoxPassword(element.domElement);
                    break;
                case 'text':
                case '':
                    txt = new js.com.cs.v1.Controls.Form.MyTextBoxSingleLine(element.domElement);
                    break;
            }
        }
        else if (element.get_tagName() === 'textarea') {
            txt = new js.com.cs.v1.Controls.Form.MyTextBoxMultiLine(element.domElement);
        }
    }
    return txt;
}
js.com.cs.v1.Controls.Form.MyTextBox.prototype = {
    domElement: null,
    
    select: function js_com_cs_v1_Controls_Form_MyTextBox$select() {
        this.domElement.select(null);
    },
    
    get_controlType: function js_com_cs_v1_Controls_Form_MyTextBox$get_controlType() {
        /// <value type="js.com.cs.v1.Controls.Form.Enums.FORM_CONTROL_TYPE"></value>
        return js.com.cs.v1.Controls.Form.Enums.FORM_CONTROL_TYPE.textBoxSingleLine;
    },
    
    get_valueObject: function js_com_cs_v1_Controls_Form_MyTextBox$get_valueObject() {
        /// <value type="Object"></value>
        return this.get_text();
    },
    set_valueObject: function js_com_cs_v1_Controls_Form_MyTextBox$set_valueObject(value) {
        /// <value type="Object"></value>
        this.set_text(value);
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Form.MyTextBoxHidden

js.com.cs.v1.Controls.Form.MyTextBoxHidden = function js_com_cs_v1_Controls_Form_MyTextBoxHidden(txt) {
    /// <param name="txt" type="Object" domElement="true">
    /// </param>
    js.com.cs.v1.Controls.Form.MyTextBoxHidden.constructBase(this, [ (isNullOrUndefined(txt)) ? document.createElement('input') : txt, 'hidden' ]);
}
js.com.cs.v1.Controls.Form.MyTextBoxHidden.prototype = {
    
    get_controlType: function js_com_cs_v1_Controls_Form_MyTextBoxHidden$get_controlType() {
        /// <value type="js.com.cs.v1.Controls.Form.Enums.FORM_CONTROL_TYPE"></value>
        return js.com.cs.v1.Controls.Form.Enums.FORM_CONTROL_TYPE.textBoxHidden;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Form.MyTextBoxMultiLine

js.com.cs.v1.Controls.Form.MyTextBoxMultiLine = function js_com_cs_v1_Controls_Form_MyTextBoxMultiLine(txt) {
    /// <param name="txt" type="Object" domElement="true">
    /// </param>
    /// <field name="domElement" type="Object" domElement="true">
    /// </field>
    js.com.cs.v1.Controls.Form.MyTextBoxMultiLine.constructBase(this, [ (isNullOrUndefined(txt)) ? document.createElement('textarea') : txt, null ]);
}
js.com.cs.v1.Controls.Form.MyTextBoxMultiLine.prototype = {
    domElement: null,
    
    get_controlType: function js_com_cs_v1_Controls_Form_MyTextBoxMultiLine$get_controlType() {
        /// <value type="js.com.cs.v1.Controls.Form.Enums.FORM_CONTROL_TYPE"></value>
        return js.com.cs.v1.Controls.Form.Enums.FORM_CONTROL_TYPE.textBoxMultiLine;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Form.MyTextBoxPassword

js.com.cs.v1.Controls.Form.MyTextBoxPassword = function js_com_cs_v1_Controls_Form_MyTextBoxPassword(txt) {
    /// <param name="txt" type="Object" domElement="true">
    /// </param>
    js.com.cs.v1.Controls.Form.MyTextBoxPassword.constructBase(this, [ (isNullOrUndefined(txt)) ? document.createElement('input') : txt, 'password' ]);
}
js.com.cs.v1.Controls.Form.MyTextBoxPassword.prototype = {
    
    get_controlType: function js_com_cs_v1_Controls_Form_MyTextBoxPassword$get_controlType() {
        /// <value type="js.com.cs.v1.Controls.Form.Enums.FORM_CONTROL_TYPE"></value>
        return js.com.cs.v1.Controls.Form.Enums.FORM_CONTROL_TYPE.textBoxPassword;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Form.MyTextBoxSingleLine

js.com.cs.v1.Controls.Form.MyTextBoxSingleLine = function js_com_cs_v1_Controls_Form_MyTextBoxSingleLine(txt) {
    /// <param name="txt" type="Object" domElement="true">
    /// </param>
    js.com.cs.v1.Controls.Form.MyTextBoxSingleLine.constructBase(this, [ (isNullOrUndefined(txt)) ? document.createElement('input') : txt, 'text' ]);
}
js.com.cs.v1.Controls.Form.MyTextBoxSingleLine.prototype = {
    
    get_controlType: function js_com_cs_v1_Controls_Form_MyTextBoxSingleLine$get_controlType() {
        /// <value type="js.com.cs.v1.Controls.Form.Enums.FORM_CONTROL_TYPE"></value>
        return js.com.cs.v1.Controls.Form.Enums.FORM_CONTROL_TYPE.textBoxSingleLine;
    }
}


Type.createNamespace('js.com.cs.v1.Controls.Form.Specialized');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Form.Specialized.MyDropDownListMenu

js.com.cs.v1.Controls.Form.Specialized.MyDropDownListMenu = function js_com_cs_v1_Controls_Form_Specialized_MyDropDownListMenu() {
    /// <field name="cmbParent" type="js.com.cs.v1.Controls.Form.MyDropDownList">
    /// </field>
    /// <field name="cmbChild" type="js.com.cs.v1.Controls.Form.MyDropDownList">
    /// </field>
}
js.com.cs.v1.Controls.Form.Specialized.MyDropDownListMenu.prototype = {
    cmbParent: null,
    cmbChild: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Form.Specialized.MyDropDownListMenuListItem

js.com.cs.v1.Controls.Form.Specialized.MyDropDownListMenuListItem = function js_com_cs_v1_Controls_Form_Specialized_MyDropDownListMenuListItem(txt, value) {
    /// <param name="txt" type="String">
    /// </param>
    /// <param name="value" type="String">
    /// </param>
    /// <field name="_subItems$1" type="js.com.cs.v1.General.Arrays.MyArray">
    /// List of ListItem
    /// </field>
    js.com.cs.v1.Controls.Form.Specialized.MyDropDownListMenuListItem.constructBase(this, [ txt, value ]);
    this._subItems$1 = new js.com.cs.v1.General.Arrays.MyArray();
}
js.com.cs.v1.Controls.Form.Specialized.MyDropDownListMenuListItem.prototype = {
    _subItems$1: null,
    
    addSubItem: function js_com_cs_v1_Controls_Form_Specialized_MyDropDownListMenuListItem$addSubItem(txt, value) {
        /// <param name="txt" type="String">
        /// </param>
        /// <param name="value" type="String">
        /// </param>
        var li = new js.com.cs.v1.General.ListItem(txt, value);
        this._subItems$1.push(li);
    },
    
    addSubItemsToField: function js_com_cs_v1_Controls_Form_Specialized_MyDropDownListMenuListItem$addSubItemsToField(cmb) {
        /// <param name="cmb" type="js.com.cs.v1.Controls.Form.MyDropDownList">
        /// </param>
        cmb.clearItems();
        for (var i = 0; i < this._subItems$1.get_length(); i++) {
            var li = this._subItems$1.get_item(i);
            cmb.addItem(li.text, li.value);
        }
    }
}


Type.createNamespace('js.com.cs.v1.Controls.Specialized.Tree');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Specialized.Tree.Tree

js.com.cs.v1.Controls.Specialized.Tree.Tree = function js_com_cs_v1_Controls_Specialized_Tree_Tree(domElement) {
    /// <param name="domElement" type="js.com.cs.v1.Controls.Common.MyDOMElement">
    /// </param>
    /// <field name="rootNodes" type="Array" elementType="TreeItem">
    /// </field>
    /// <field name="domElement" type="js.com.cs.v1.Controls.Common.MyDOMElement">
    /// </field>
    this.domElement = domElement;
    this.rootNodes = [];
}
js.com.cs.v1.Controls.Specialized.Tree.Tree.prototype = {
    rootNodes: null,
    domElement: null,
    
    renderTree: function js_com_cs_v1_Controls_Specialized_Tree_Tree$renderTree() {
        this.domElement.clear();
        var ul = new js.com.cs.v1.Controls.Common.MyUnOrderedListElem();
        this.domElement.appendChild(ul);
        for (var i = 0; i < this.rootNodes.length; i++) {
            ul.appendChild(this.rootNodes[i].getAsListItemElem());
        }
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Controls.Specialized.Tree.TreeItem

js.com.cs.v1.Controls.Specialized.Tree.TreeItem = function js_com_cs_v1_Controls_Specialized_Tree_TreeItem(ID, title, isSelected, cssClassNormal, cssClassSelected) {
    /// <param name="ID" type="String">
    /// </param>
    /// <param name="title" type="String">
    /// </param>
    /// <param name="isSelected" type="Boolean">
    /// </param>
    /// <param name="cssClassNormal" type="String">
    /// </param>
    /// <param name="cssClassSelected" type="String">
    /// </param>
    /// <field name="title" type="String">
    /// </field>
    /// <field name="id" type="String">
    /// </field>
    /// <field name="cssClass_Normal" type="String">
    /// </field>
    /// <field name="cssClass_Selected" type="String">
    /// </field>
    /// <field name="click" type="EventHandler">
    /// </field>
    /// <field name="children" type="Array" elementType="TreeItem">
    /// </field>
    /// <field name="isSelected" type="Boolean">
    /// </field>
    this.id = ID;
    this.title = title;
    this.isSelected = this.isSelected;
    this.cssClass_Normal = cssClassNormal;
    this.cssClass_Selected = cssClassSelected;
    this.children = [];
}
js.com.cs.v1.Controls.Specialized.Tree.TreeItem.prototype = {
    title: null,
    id: null,
    cssClass_Normal: null,
    cssClass_Selected: null,
    click: null,
    children: null,
    isSelected: false,
    
    getAsListItemElem: function js_com_cs_v1_Controls_Specialized_Tree_TreeItem$getAsListItemElem() {
        /// <returns type="js.com.cs.v1.Controls.Common.MyListItemElem"></returns>
        var li = new js.com.cs.v1.Controls.Common.MyListItemElem();
        var divTitle = new js.com.cs.v1.Controls.Common.MyDivElement();
        divTitle.set_innerText(this.title);
        li.appendChild(divTitle);
        if (this.children != null && this.children.length > 0) {
            var ul = new js.com.cs.v1.Controls.Common.MyUnOrderedListElem();
            li.appendChild(ul);
            for (var i = 0; i < this.children.length; i++) {
                ul.appendChild(this.children[i].getAsListItemElem());
            }
        }
        return li;
    },
    
    addChild: function js_com_cs_v1_Controls_Specialized_Tree_TreeItem$addChild(treeItem) {
        /// <param name="treeItem" type="js.com.cs.v1.Controls.Specialized.Tree.TreeItem">
        /// </param>
        js.com.cs.v1.Util.ArrayUtil.addItemInArray(this.children, treeItem);
    },
    
    removeChild: function js_com_cs_v1_Controls_Specialized_Tree_TreeItem$removeChild(treeItem) {
        /// <param name="treeItem" type="js.com.cs.v1.Controls.Specialized.Tree.TreeItem">
        /// </param>
        var sID = '';
        if (Type.canCast(treeItem, js.com.cs.v1.Controls.Specialized.Tree.TreeItem)) {
            sID = treeItem.id;
        }
        else {
            sID = treeItem;
        }
        for (var i = 0; i < this.children.length; i++) {
            if (this.children[i].id === sID) {
                js.com.cs.v1.Util.ArrayUtil.removeItemFromArray(this.children, i);
                break;
            }
        }
    }
}


Type.createNamespace('js.com.cs.v1.Events');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Events.EventItem

js.com.cs.v1.Events.EventItem = function js_com_cs_v1_Events_EventItem() {
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Events.EventsHandler

js.com.cs.v1.Events.EventsHandler = function js_com_cs_v1_Events_EventsHandler() {
    /// <field name="events" type="Array" elementType="EventItem">
    /// </field>
    this.events = [];
}
js.com.cs.v1.Events.EventsHandler.prototype = {
    events: null,
    
    addEventListener: function js_com_cs_v1_Events_EventsHandler$addEventListener(eventName, handler) {
        /// <param name="eventName" type="String">
        /// </param>
        /// <param name="handler" type="Delegate">
        /// </param>
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Events.GenericEventItem

js.com.cs.v1.Events.GenericEventItem = function js_com_cs_v1_Events_GenericEventItem() {
    /// <field name="eventName" type="String">
    /// </field>
    /// <field name="handler" type="Delegate">
    /// </field>
    /// <field name="scope" type="Object">
    /// </field>
}
js.com.cs.v1.Events.GenericEventItem.prototype = {
    eventName: null,
    handler: null,
    scope: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Events.GenericEventsHandler

js.com.cs.v1.Events.GenericEventsHandler = function js_com_cs_v1_Events_GenericEventsHandler() {
    /// <field name="_events" type="Array" elementType="GenericEventItem">
    /// </field>
    this._events = [];
}
js.com.cs.v1.Events.GenericEventsHandler.prototype = {
    _events: null,
    
    addListener: function js_com_cs_v1_Events_GenericEventsHandler$addListener(eventName, handler, scope) {
        /// <param name="eventName" type="String">
        /// </param>
        /// <param name="handler" type="Delegate">
        /// </param>
        /// <param name="scope" type="Object">
        /// </param>
        /// <returns type="Object"></returns>
        if (isNullOrUndefined(scope)) {
            scope = js.com.cs.v1.Util.GeneralUtil.getDelegateScope(handler);
        }
        var item = new js.com.cs.v1.Events.GenericEventItem();
        item.eventName = eventName;
        item.handler = handler;
        item.scope = scope;
        this._events[this._events.length] = item;
        return js.com.cs.v1.Util.GeneralUtil.getDelegateFunction(item.handler);
    },
    
    removeListener: function js_com_cs_v1_Events_GenericEventsHandler$removeListener(eventName, handler, returnDelegateNotFunction) {
        /// <param name="eventName" type="String">
        /// </param>
        /// <param name="handler" type="Delegate">
        /// </param>
        /// <param name="returnDelegateNotFunction" type="Boolean">
        /// </param>
        /// <returns type="Object"></returns>
        for (var i = 0; i < this._events.length; i++) {
            var item = this._events[i];
            if (item.eventName === eventName && js.com.cs.v1.Util.GeneralUtil.compareDelegate(item.handler, handler)) {
                var method = js.com.cs.v1.Util.GeneralUtil.getDelegateFunction(item.handler);
                (this._events).removeAt(i);
                if (returnDelegateNotFunction) {
                    return item.handler;
                }
                else {
                    return method;
                }
            }
        }
        return null;
    }
}


Type.createNamespace('js.com.cs.v1.Forms.FileUploader');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Forms.FileUploader.UploadProgress

js.com.cs.v1.Forms.FileUploader.UploadProgress = function js_com_cs_v1_Forms_FileUploader_UploadProgress(variableName, baseURL, queryStringParameter) {
    /// <summary>
    /// In order to use this Upload Progress Bar, all you need to do is attach to 'Instance.UploadProgress'
    /// </summary>
    /// <param name="variableName" type="String">
    /// The variable name, or can be left null for default
    /// </param>
    /// <param name="baseURL" type="String">
    /// Base URL to call for upload progress. If left null defaults to '/uploadProgress.ashx'
    /// </param>
    /// <param name="queryStringParameter" type="String">
    /// Querystring paramenters, if left null defaults to 'uploadID'
    /// </param>
    /// <field name="_Instance" type="js.com.cs.v1.Forms.FileUploader.UploadProgress" static="true">
    /// </field>
    /// <field name="showProgressBar" type="Boolean">
    /// </field>
    /// <field name="started" type="Boolean">
    /// </field>
    /// <field name="_RequireFilledFileUploads" type="Boolean">
    /// </field>
    /// <field name="_CheckFileUploadsInAllDocument" type="Boolean">
    /// </field>
    /// <field name="checkProgressInterval" type="Number" integer="true">
    /// </field>
    /// <field name="_variableName" type="String">
    /// </field>
    /// <field name="_baseURL" type="String">
    /// </field>
    /// <field name="_queryStringParameter" type="String">
    /// </field>
    /// <field name="_progressIDElementName" type="String">
    /// This is the ID of the textbox that will contain the upload ID GUID
    /// </field>
    /// <field name="functionToCallOnStart" type="DOMEventHandler">
    /// </field>
    /// <field name="_progressBar" type="Object">
    /// </field>
    /// <field name="__updateProgress" type="js.com.cs.v1.Forms.FileUploader.UploadProgressEventHandler">
    /// </field>
    this.set_checkFileUploadsInAllDocument(false);
    this.set_requireFilledFileUploads(true);
    if (!String.isNullOrEmpty(variableName)) {
        this._variableName = variableName;
    }
    if (!String.isNullOrEmpty(baseURL)) {
        this._baseURL = baseURL;
    }
    if (!String.isNullOrEmpty(queryStringParameter)) {
        this._queryStringParameter = queryStringParameter;
    }
    this._init();
}
js.com.cs.v1.Forms.FileUploader.UploadProgress.get_instance = function js_com_cs_v1_Forms_FileUploader_UploadProgress$get_instance() {
    /// <value type="js.com.cs.v1.Forms.FileUploader.UploadProgress"></value>
    if (js.com.cs.v1.Forms.FileUploader.UploadProgress._Instance == null) {
        js.com.cs.v1.Forms.FileUploader.UploadProgress._Instance = new js.com.cs.v1.Forms.FileUploader.UploadProgress(null, null, null);
    }
    return js.com.cs.v1.Forms.FileUploader.UploadProgress._Instance;
}
js.com.cs.v1.Forms.FileUploader.UploadProgress.prototype = {
    showProgressBar: false,
    started: false,
    _RequireFilledFileUploads: false,
    
    get_requireFilledFileUploads: function js_com_cs_v1_Forms_FileUploader_UploadProgress$get_requireFilledFileUploads() {
        /// <value type="Boolean"></value>
        return this._RequireFilledFileUploads;
    },
    set_requireFilledFileUploads: function js_com_cs_v1_Forms_FileUploader_UploadProgress$set_requireFilledFileUploads(value) {
        /// <value type="Boolean"></value>
        this._RequireFilledFileUploads = value;
        return value;
    },
    
    _CheckFileUploadsInAllDocument: false,
    
    get_checkFileUploadsInAllDocument: function js_com_cs_v1_Forms_FileUploader_UploadProgress$get_checkFileUploadsInAllDocument() {
        /// <value type="Boolean"></value>
        return this._CheckFileUploadsInAllDocument;
    },
    set_checkFileUploadsInAllDocument: function js_com_cs_v1_Forms_FileUploader_UploadProgress$set_checkFileUploadsInAllDocument(value) {
        /// <value type="Boolean"></value>
        this._CheckFileUploadsInAllDocument = value;
        return value;
    },
    
    checkProgressInterval: 1000,
    _variableName: 'js.com.cs.v1.forms.FileUploader.get_instance()',
    _baseURL: '/uploadProgress.ashx',
    _queryStringParameter: 'uploadID',
    _progressIDElementName: 'uploadprogressbar_uploadid',
    functionToCallOnStart: null,
    _progressBar: null,
    
    checkRequirements: function js_com_cs_v1_Forms_FileUploader_UploadProgress$checkRequirements() {
        /// <summary>
        /// Checks whether there is at least one file upload filled in, in current form
        /// </summary>
        /// <returns type="Boolean"></returns>
        var elements = dojoClass.query('input[type=\'file\']');
        var atLeastOne = true;
        if (this.get_requireFilledFileUploads()) {
            atLeastOne = false;
            for (var i = 0; i < elements.length; i++) {
                var elem = elements[i];
                var fileUpload = new js.com.cs.v1.Controls.Form.MyFileUpload(elem);
                var ok = false;
                if (!this.get_checkFileUploadsInAllDocument()) {
                    var field = fileUpload.getFieldFromFormsCollection();
                    var valGroup = field.validationGroup;
                    ok = (valGroup === js.com.cs.v1.UI.Forms.FormsCollection.get_instance().currentForm.validationGroup);
                }
                if (ok) {
                    if (!String.isNullOrEmpty(fileUpload.get_text())) {
                        atLeastOne = true;
                        break;
                    }
                }
            }
        }
        return atLeastOne;
    },
    
    updateFormAction: function js_com_cs_v1_Forms_FileUploader_UploadProgress$updateFormAction(form) {
        /// <summary>
        /// Updates the forms action to reflect the progress ID GUID
        /// </summary>
        /// <param name="form" type="js.com.cs.v1.UI.Forms.Form">
        /// </param>
        var txt = new js.com.cs.v1.Controls.Form.MyTextBoxHidden(this._progressIDElementName);
        if (txt != null && form.formElement.checkIfFormContainsFilledFileUploads()) {
            var action = form.formElement.get_action();
            var re = new RegExp('&?' + this._queryStringParameter + '=[^&]*');
            if (action.match(re) != null && action.match(re).length > 0) {
                action = action.replace(re, '');
            }
            var delim = '';
            if (action.indexOf('?') === action.length - 1) {
                delim = '';
            }
            else {
                delim = '?';
                if (action.indexOf('?') > -1) {
                    delim = '&';
                }
            }
            action += delim + this._queryStringParameter + '=' + txt.get_text();
            form.formElement.set_action(action);
        }
    },
    
    _init: function js_com_cs_v1_Forms_FileUploader_UploadProgress$_init() {
    },
    
    add_updateProgress: function js_com_cs_v1_Forms_FileUploader_UploadProgress$add_updateProgress(value) {
        /// <param name="value" type="Function" />
        this.__updateProgress = Delegate.combine(this.__updateProgress, value);
    },
    remove_updateProgress: function js_com_cs_v1_Forms_FileUploader_UploadProgress$remove_updateProgress(value) {
        /// <param name="value" type="Function" />
        this.__updateProgress = Delegate.remove(this.__updateProgress, value);
    },
    
    __updateProgress: null,
    
    _getUploadProgressURL: function js_com_cs_v1_Forms_FileUploader_UploadProgress$_getUploadProgressURL() {
        /// <returns type="String"></returns>
        var d = new Date();
        var ts = d.getTime().toString();
        var txt = new js.com.cs.v1.Controls.Form.MyTextBoxHidden(this._progressIDElementName);
        var url = this._baseURL + '?' + this._queryStringParameter + '=' + txt.get_text() + ' &ts=' + ts;
        return url;
    },
    
    _uploadProgress_GetStatus: function js_com_cs_v1_Forms_FileUploader_UploadProgress$_uploadProgress_GetStatus() {
        var xhrArgs = {};
        xhrArgs.url = this._getUploadProgressURL();
        xhrArgs.handleAs = js.com.cs.v1.AJAX.AjaxClass.handleAsToString(js.com.cs.v1.AJAX.HANDLE_AS.XML);
        xhrArgs.load = Delegate.create(this, this._uploadProgress_GetStatus_OnLoad);
        xhrArgs.error = Delegate.create(this, this._uploadProgress_GetStatus_OnError);
        xhrArgs.timeout = 15000;
        dojoClass.xhrGet(xhrArgs);
    },
    
    _uploadProgress_GetStatus_OnError: function js_com_cs_v1_Forms_FileUploader_UploadProgress$_uploadProgress_GetStatus_OnError(obj) {
        /// <param name="obj" type="Object">
        /// </param>
        window.setTimeout(Delegate.create(this, this._uploadProgress_GetStatus), this.checkProgressInterval);
    },
    
    _uploadProgress_GetStatus_OnLoad: function js_com_cs_v1_Forms_FileUploader_UploadProgress$_uploadProgress_GetStatus_OnLoad(obj) {
        /// <param name="obj" type="Object">
        /// </param>
        var res = obj;
        var progress = 0;
        var filename = '';
        var byteFrom = 0;
        var byteTotal = 0;
        var sEmpty = 'false';
        if (res.documentElement.attributes.getNamedItem('empty') != null) {
            sEmpty = res.documentElement.attributes.getNamedItem('empty').text;
        }
        if (sEmpty === 'true') {
        }
        else {
            progress = parseFloat(res.documentElement.attributes.getNamedItem('progress').text);
            byteFrom = parseFloat(res.documentElement.attributes.getNamedItem('bytes').text);
            byteTotal = parseFloat(res.documentElement.attributes.getNamedItem('size').text);
            filename = res.documentElement.attributes.getNamedItem('file').text;
            if (this.__updateProgress != null) {
                this.__updateProgress.invoke(progress, byteFrom, byteTotal, filename);
            }
        }
        if (progress < 100) {
            window.setTimeout(Delegate.create(this, this._uploadProgress_GetStatus), this.checkProgressInterval);
        }
    },
    
    start: function js_com_cs_v1_Forms_FileUploader_UploadProgress$start() {
        js.com.cs.v1.Util.Console.log('START');
        if (this.checkRequirements()) {
            this.started = true;
            this._uploadProgress_GetStatus();
            if (this.functionToCallOnStart != null) {
                this.functionToCallOnStart.invoke();
            }
        }
    }
}


Type.createNamespace('js.com.cs.v1.Forms.linkedMenu');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Forms.linkedMenu.LinkedMenu

js.com.cs.v1.Forms.linkedMenu.LinkedMenu = function js_com_cs_v1_Forms_linkedMenu_LinkedMenu(root) {
    /// <param name="root" type="js.com.cs.v1.Forms.linkedMenu.LinkedMenuLevel">
    /// </param>
    /// <field name="_cmbs" type="js.com.cs.v1.General.Arrays.MyArray">
    /// List of [LinkedMenuComboBox]
    /// </field>
    /// <field name="_root" type="js.com.cs.v1.Forms.linkedMenu.LinkedMenuLevel">
    /// </field>
    /// <field name="cssDisabled" type="String">
    /// </field>
    this._cmbs = new js.com.cs.v1.General.Arrays.MyArray();
    this._root = root;
}
js.com.cs.v1.Forms.linkedMenu.LinkedMenu.prototype = {
    _root: null,
    cssDisabled: null,
    
    _parseCmbs: function js_com_cs_v1_Forms_linkedMenu_LinkedMenu$_parseCmbs(cmbs) {
        /// <param name="cmbs" type="js.com.cs.v1.General.Arrays.MyArray">
        /// </param>
        for (var i = 0; i < cmbs.get_length(); i++) {
            var cmb = cmbs.get_item(i);
            if (Type.canCast(cmb, String)) {
                var cmbID = cmb;
                cmb = document.getElementById(cmbID);
                if (cmb == null) {
                    alert('com.cs.forms.LinkedMenu: The combo box with id \'' + cmbID + '\' cannot be found in DOM.');
                }
                this._cmbs.push(new js.com.cs.v1.Forms.linkedMenu.LinkedMenuComboBox(new js.com.cs.v1.Controls.Form.MyDropDownList(cmb), i, this, '', '0'));
            }
        }
    },
    
    _enableAllLevels: function js_com_cs_v1_Forms_linkedMenu_LinkedMenu$_enableAllLevels() {
        for (var i = 0; i < this._cmbs.get_length(); i++) {
            var cmb = this._cmbs.get_item(i);
            cmb.enable();
        }
    },
    
    disableOtherLevels: function js_com_cs_v1_Forms_linkedMenu_LinkedMenu$disableOtherLevels(levelIndex) {
        /// <param name="levelIndex" type="Number" integer="true">
        /// </param>
        for (var i = levelIndex + 1; i < this._cmbs.get_length(); i++) {
            var cmb = this._cmbs.get_item(i);
            cmb.disable();
        }
    },
    
    populateLevel: function js_com_cs_v1_Forms_linkedMenu_LinkedMenu$populateLevel(levelIndex, linkedMenuLevels) {
        /// <param name="levelIndex" type="Number" integer="true">
        /// </param>
        /// <param name="linkedMenuLevels" type="js.com.cs.v1.General.Arrays.MyArray">
        /// List of [LinkedMenuLevel]
        /// </param>
        this._enableAllLevels();
        if (levelIndex >= this._cmbs.get_length()) {
            alert('com.cs.forms.LinkedMenu: Please specify a combo box for level ' + (levelIndex + 1) + ' because at the moment only ' + this._cmbs.get_length() + ' level(s) are specified');
        }
        var cmb = this._cmbs.get_item(levelIndex);
        var hasGotSubLevels = cmb.populate(linkedMenuLevels);
        if (!hasGotSubLevels) {
            this.disableOtherLevels(levelIndex);
        }
    },
    
    initMenu: function js_com_cs_v1_Forms_linkedMenu_LinkedMenu$initMenu() {
        /// <summary>
        /// Initialises the menu
        /// </summary>
        this.populateLevel(0, this._root.children);
    },
    
    addComboBox: function js_com_cs_v1_Forms_linkedMenu_LinkedMenu$addComboBox(cmb, disabledText, disabledValue) {
        /// <param name="cmb" type="js.com.cs.v1.Controls.Form.MyDropDownList">
        /// </param>
        /// <param name="disabledText" type="String">
        /// </param>
        /// <param name="disabledValue" type="String">
        /// </param>
        var cmbBox = new js.com.cs.v1.Forms.linkedMenu.LinkedMenuComboBox(cmb, this._cmbs.get_length(), this, disabledText, disabledValue);
        this._cmbs.push(cmbBox);
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Forms.linkedMenu.LinkedMenuComboBox

js.com.cs.v1.Forms.linkedMenu.LinkedMenuComboBox = function js_com_cs_v1_Forms_linkedMenu_LinkedMenuComboBox(cmb, levelIndex, linkedMenu, disabledText, disabledValue) {
    /// <param name="cmb" type="js.com.cs.v1.Controls.Form.MyDropDownList">
    /// </param>
    /// <param name="levelIndex" type="Number" integer="true">
    /// </param>
    /// <param name="linkedMenu" type="js.com.cs.v1.Forms.linkedMenu.LinkedMenu">
    /// </param>
    /// <param name="disabledText" type="String">
    /// </param>
    /// <param name="disabledValue" type="String">
    /// </param>
    /// <field name="cmb" type="js.com.cs.v1.Controls.Form.MyDropDownList">
    /// </field>
    /// <field name="levelIndex" type="Number" integer="true">
    /// </field>
    /// <field name="linkedMenu" type="js.com.cs.v1.Forms.linkedMenu.LinkedMenu">
    /// </field>
    /// <field name="disabledText" type="String">
    /// </field>
    /// <field name="disabledValue" type="String">
    /// </field>
    /// <field name="_currentValue" type="String">
    /// </field>
    /// <field name="_initiallyDisabled" type="Boolean">
    /// </field>
    /// <field name="linkedMenuLevels" type="js.com.cs.v1.General.Arrays.MyArray">
    /// List of [LinkedMenuLevel]
    /// </field>
    this.linkedMenuLevels = new js.com.cs.v1.General.Arrays.MyArray();
    this.levelIndex = levelIndex;
    this.disabledValue = disabledValue;
    if (String.isNullOrEmpty(this.disabledValue)) {
        this.disabledValue = this.disabledText;
    }
    this.cmb = cmb;
    this.linkedMenu = linkedMenu;
    this.disabledText = disabledText;
    this._initiallyDisabled = cmb.get_disabled();
    this._init();
}
js.com.cs.v1.Forms.linkedMenu.LinkedMenuComboBox.prototype = {
    cmb: null,
    levelIndex: 0,
    linkedMenu: null,
    disabledText: null,
    disabledValue: null,
    _currentValue: null,
    _initiallyDisabled: false,
    
    _getLinkedMenuLevel: function js_com_cs_v1_Forms_linkedMenu_LinkedMenuComboBox$_getLinkedMenuLevel(value) {
        /// <param name="value" type="String">
        /// </param>
        /// <returns type="js.com.cs.v1.Forms.linkedMenu.LinkedMenuLevel"></returns>
        for (var i = 0; i < this.linkedMenuLevels.get_length(); i++) {
            var level = this.linkedMenuLevels.get_item(i);
            if (level.option.value === value) {
                return level;
            }
        }
        return null;
    },
    
    _onChange: function js_com_cs_v1_Forms_linkedMenu_LinkedMenuComboBox$_onChange() {
        var value = this.cmb.get_text();
        if (value === this._currentValue) {
            return;
        }
        this._currentValue = value;
        this.cmb.callChange();
        var level = this._getLinkedMenuLevel(value);
        if (level.children.get_length() > 0) {
            this.linkedMenu.populateLevel(this.levelIndex + 1, level.children);
        }
        else {
            this.linkedMenu.disableOtherLevels(this.levelIndex);
        }
    },
    
    _initHandlers: function js_com_cs_v1_Forms_linkedMenu_LinkedMenuComboBox$_initHandlers() {
        this.cmb.add_onChange(Delegate.create(this, this._onChange));
        this.cmb.add_onKeyUp(Delegate.create(this, this._onChange));
    },
    
    _clearItems: function js_com_cs_v1_Forms_linkedMenu_LinkedMenuComboBox$_clearItems() {
        this.cmb.clearItems();
    },
    
    _init: function js_com_cs_v1_Forms_linkedMenu_LinkedMenuComboBox$_init() {
        this._clearItems();
        this._initHandlers();
    },
    
    enable: function js_com_cs_v1_Forms_linkedMenu_LinkedMenuComboBox$enable() {
        if (this._initiallyDisabled) {
            return;
        }
        this.cmb.enable();
        this.cmb.get_style().backgroundColor = null;
        this.cmb.removeClass(this.linkedMenu.cssDisabled);
    },
    
    disable: function js_com_cs_v1_Forms_linkedMenu_LinkedMenuComboBox$disable() {
        if (this._initiallyDisabled) {
            return;
        }
        this.cmb.disable();
        this._clearItems();
        this.cmb.addItem(this.disabledText, this.disabledValue);
        this.cmb.addClass(this.linkedMenu.cssDisabled);
    },
    
    populate: function js_com_cs_v1_Forms_linkedMenu_LinkedMenuComboBox$populate(linkedMenuLevels) {
        /// <param name="linkedMenuLevels" type="js.com.cs.v1.General.Arrays.MyArray">
        /// </param>
        /// <returns type="Boolean"></returns>
        this._clearItems();
        this.linkedMenuLevels = linkedMenuLevels;
        var selectedLevel = null;
        var selectedLevelIndex = -1;
        var hasGotSubLevels = false;
        for (var i = 0; i < linkedMenuLevels.get_length(); i++) {
            var level = linkedMenuLevels.get_item(i);
            var opt = level.option;
            this.cmb.addItemFromOption(opt);
            if (level.selected && selectedLevel == null) {
                selectedLevel = level;
                selectedLevelIndex = i;
            }
        }
        if (selectedLevel == null && linkedMenuLevels.get_length() > 0) {
            selectedLevel = linkedMenuLevels.get_item(0);
            selectedLevelIndex = 0;
        }
        if (selectedLevel.children.get_length() > 0) {
            this._currentValue = selectedLevel.option.value;
            this.linkedMenu.populateLevel(this.levelIndex + 1, selectedLevel.children);
            hasGotSubLevels = true;
        }
        this.cmb.set_selectedIndex(selectedLevelIndex);
        return hasGotSubLevels;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Forms.linkedMenu.LinkedMenuLevel

js.com.cs.v1.Forms.linkedMenu.LinkedMenuLevel = function js_com_cs_v1_Forms_linkedMenu_LinkedMenuLevel(title, value, selected) {
    /// <param name="title" type="String">
    /// </param>
    /// <param name="value" type="String">
    /// </param>
    /// <param name="selected" type="Boolean">
    /// </param>
    /// <field name="option" type="Object" domElement="true">
    /// </field>
    /// <field name="selected" type="Boolean">
    /// </field>
    /// <field name="children" type="js.com.cs.v1.General.Arrays.MyArray">
    /// List of [LinkedMenuLevel]
    /// </field>
    this.children = new js.com.cs.v1.General.Arrays.MyArray();
    this.option = document.createElement('option');
    this.option.text = title;
    this.option.value = value;
    this.selected = selected;
}
js.com.cs.v1.Forms.linkedMenu.LinkedMenuLevel.prototype = {
    option: null,
    selected: false,
    
    addSubLevel: function js_com_cs_v1_Forms_linkedMenu_LinkedMenuLevel$addSubLevel(linkedMenuLevel) {
        /// <param name="linkedMenuLevel" type="js.com.cs.v1.Forms.linkedMenu.LinkedMenuLevel">
        /// </param>
        this.children.push(linkedMenuLevel);
    },
    
    addSubLevels: function js_com_cs_v1_Forms_linkedMenu_LinkedMenuLevel$addSubLevels(linkedMenuLevels) {
        /// <param name="linkedMenuLevels" type="js.com.cs.v1.General.Arrays.MyArray">
        /// </param>
        for (var i = 0; i < linkedMenuLevels.get_length(); i++) {
            this.addSubLevel(linkedMenuLevels.get_item(i));
        }
    }
}


Type.createNamespace('js.com.cs.v1.Forms.Validation');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Forms.Validation.CharsLimit

js.com.cs.v1.Forms.Validation.CharsLimit = function js_com_cs_v1_Forms_Validation_CharsLimit(txt, amtLimit, elemDisplayRemaining) {
    /// <param name="txt" type="js.com.cs.v1.Controls.Form.MyTextBox">
    /// </param>
    /// <param name="amtLimit" type="Number" integer="true">
    /// </param>
    /// <param name="elemDisplayRemaining" type="js.com.cs.v1.Controls.Common.MyDOMElement">
    /// </param>
    /// <field name="_elemDisplayText$1" type="js.com.cs.v1.Controls.Common.MyDOMElement">
    /// </field>
    js.com.cs.v1.Forms.Validation.CharsLimit.constructBase(this, [ txt, amtLimit, elemDisplayRemaining, false ]);
}
js.com.cs.v1.Forms.Validation.CharsLimit.prototype = {
    _elemDisplayText$1: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Forms.Validation.VALIDATION_PARAMETERS

js.com.cs.v1.Forms.Validation.VALIDATION_PARAMETERS = function js_com_cs_v1_Forms_Validation_VALIDATION_PARAMETERS() {
    /// <field name="isRequired" type="Boolean">
    /// </field>
    /// <field name="isEmail" type="Boolean">
    /// </field>
    /// <field name="isNumber" type="Boolean">
    /// </field>
    /// <field name="positiveOnly" type="Boolean">
    /// </field>
    /// <field name="isWebsite" type="Boolean">
    /// </field>
    /// <field name="negativeOnly" type="Boolean">
    /// </field>
    /// <field name="integersOnly" type="Boolean">
    /// </field>
    /// <field name="numFrom" type="Number">
    /// </field>
    /// <field name="numTo" type="Number">
    /// </field>
    /// <field name="dateFrom" type="Date">
    /// </field>
    /// <field name="dateTo" type="Date">
    /// </field>
    /// <field name="isCurrency" type="Boolean">
    /// </field>
    /// <field name="currencySymbol" type="String">
    /// </field>
    /// <field name="isCreditCardNumber" type="Boolean">
    /// </field>
    /// <field name="isIPAddress" type="Boolean">
    /// </field>
    /// <field name="isDate" type="Boolean">
    /// </field>
    /// <field name="valueCaseSensitive" type="Boolean">
    /// </field>
    /// <field name="doNotValidateOnBlur" type="Boolean">
    /// </field>
    /// <field name="dateFormat" type="String">
    /// </field>
    /// <field name="minLength" type="Number" integer="true">
    /// </field>
    /// <field name="maxLength" type="Number" integer="true">
    /// </field>
    /// <field name="initialEmptyText" type="String">
    /// </field>
    /// <field name="fileExtensionsAllowed" type="Array" elementType="String">
    /// A comma-seperated string of file extensions allowed, e.g gif, bmp, tif...
    /// </field>
    /// <field name="maxWords" type="Number" integer="true">
    /// </field>
    /// <field name="isAlphaNumeric" type="Boolean">
    /// </field>
    /// <field name="valueIn" type="js.com.cs.v1.General.Arrays.MyArray">
    /// </field>
    /// <field name="valueNotIn" type="js.com.cs.v1.General.Arrays.MyArray">
    /// </field>
    /// <field name="regExpPattern" type="RegExp">
    /// </field>
    this.valueIn = new js.com.cs.v1.General.Arrays.MyArray();
    this.valueNotIn = new js.com.cs.v1.General.Arrays.MyArray();
}
js.com.cs.v1.Forms.Validation.VALIDATION_PARAMETERS.prototype = {
    isRequired: false,
    isEmail: false,
    isNumber: false,
    positiveOnly: false,
    isWebsite: false,
    negativeOnly: false,
    integersOnly: false,
    numFrom: null,
    numTo: null,
    dateFrom: null,
    dateTo: null,
    isCurrency: false,
    currencySymbol: '\ufffd',
    isCreditCardNumber: false,
    isIPAddress: false,
    isDate: false,
    valueCaseSensitive: false,
    doNotValidateOnBlur: false,
    dateFormat: 'dd/MM/yyyy',
    minLength: 0,
    maxLength: 0,
    initialEmptyText: null,
    fileExtensionsAllowed: null,
    maxWords: 0,
    isAlphaNumeric: false,
    regExpPattern: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Forms.Validation.OUTPUT_ERROR_MSG

js.com.cs.v1.Forms.Validation.OUTPUT_ERROR_MSG = function js_com_cs_v1_Forms_Validation_OUTPUT_ERROR_MSG() {
    /// <field name="errorMessage" type="String">
    /// </field>
}
js.com.cs.v1.Forms.Validation.OUTPUT_ERROR_MSG.prototype = {
    errorMessage: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Forms.Validation.Validation

js.com.cs.v1.Forms.Validation.Validation = function js_com_cs_v1_Forms_Validation_Validation() {
}
js.com.cs.v1.Forms.Validation.Validation.containCharactersWhichAreNot = function js_com_cs_v1_Forms_Validation_Validation$containCharactersWhichAreNot(str, allowedCharsPattern) {
    /// <param name="str" type="String">
    /// </param>
    /// <param name="allowedCharsPattern" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    if (!isNullOrUndefined(allowedCharsPattern)) {
        var r = new RegExp('[^' + allowedCharsPattern + ']*');
        return r.test(str);
    }
    return true;
}
js.com.cs.v1.Forms.Validation.Validation.containOnlyCharacters = function js_com_cs_v1_Forms_Validation_Validation$containOnlyCharacters(str, allowedCharsPattern) {
    /// <param name="str" type="String">
    /// </param>
    /// <param name="allowedCharsPattern" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    return !js.com.cs.v1.Forms.Validation.Validation.containCharactersWhichAreNot(str, allowedCharsPattern);
}
js.com.cs.v1.Forms.Validation.Validation.isEmail = function js_com_cs_v1_Forms_Validation_Validation$isEmail(str) {
    /// <param name="str" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    var regExp = new RegExp('^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6}$');
    var ok = regExp.test(str);
    var regExp2 = new RegExp('\\.\\.');
    if (ok && regExp2.test(str)) {
        ok = false;
    }
    return ok;
}
js.com.cs.v1.Forms.Validation.Validation.isWebsite = function js_com_cs_v1_Forms_Validation_Validation$isWebsite(str) {
    /// <param name="str" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    var regEx = new RegExp('^(https?://)?[a-zA-Z0-9.-_]+\\.[a-zA-Z]{2-7}$');
    var ok = false;
    ok = true;
    return ok;
}
js.com.cs.v1.Forms.Validation.Validation.isNumber = function js_com_cs_v1_Forms_Validation_Validation$isNumber(str, parameters, outErrorMsg, itemTitle) {
    /// <param name="str" type="String">
    /// </param>
    /// <param name="parameters" type="js.com.cs.v1.Forms.Validation.VALIDATION_PARAMETERS">
    /// </param>
    /// <param name="outErrorMsg" type="js.com.cs.v1.Forms.Validation.OUTPUT_ERROR_MSG">
    /// </param>
    /// <param name="itemTitle" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    var ok = true;
    if (isNullOrUndefined(itemTitle)) {
        itemTitle = 'Number';
    }
    var regExpNum = new RegExp('^[-+]?[0-9]*$|^[-+]?[0-9]*\\.[0-9]*$');
    var isNum = regExpNum.test(str);
    if (isNum) {
        var num = parseFloat(str);
        if (!isNullOrUndefined(parameters) && (!isNullOrUndefined(parameters.numFrom) || !isNullOrUndefined(parameters.numTo))) {
            if (isNullOrUndefined(parameters.numFrom)) {
                parameters.numFrom = Number.NEGATIVE_INFINITY;
            }
            if (isNullOrUndefined(parameters.numTo)) {
                parameters.numTo = Number.POSITIVE_INFINITY;
            }
            var from = Math.min(parameters.numFrom, parameters.numTo);
            var to = Math.max(parameters.numFrom, parameters.numTo);
            if (num < from || num > to) {
                if (from === Number.NEGATIVE_INFINITY) {
                    if (!isNullOrUndefined(outErrorMsg)) {
                        outErrorMsg.errorMessage = itemTitle + ' must be smaller than or equal to ' + to;
                    }
                }
                else if (to === Number.POSITIVE_INFINITY) {
                    if (!isNullOrUndefined(outErrorMsg)) {
                        outErrorMsg.errorMessage = itemTitle + ' must be greater than or equal to ' + from;
                    }
                }
                else {
                    if (!isNullOrUndefined(outErrorMsg)) {
                        outErrorMsg.errorMessage = itemTitle + ' must be greater than or equal to ' + from + ' and smaller than or equal to ' + to;
                    }
                }
                return false;
            }
        }
        if (ok && !isNullOrUndefined(parameters)) {
            if (parameters.positiveOnly && num < 0) {
                if (!isNullOrUndefined(outErrorMsg)) {
                    outErrorMsg.errorMessage = itemTitle + ' must be positive';
                }
                return false;
            }
            if (parameters.negativeOnly && num > 0) {
                if (!isNullOrUndefined(outErrorMsg)) {
                    outErrorMsg.errorMessage = itemTitle + ' must be negative';
                }
                return false;
            }
            if (parameters.integersOnly && parseInt(num) !== num) {
                if (!isNullOrUndefined(outErrorMsg)) {
                    outErrorMsg.errorMessage = itemTitle + ' must be a whole number';
                }
                return false;
            }
        }
    }
    else {
        if (!isNullOrUndefined(outErrorMsg)) {
            outErrorMsg.errorMessage = itemTitle + ' - Invalid number';
        }
        return false;
    }
    return true;
}
js.com.cs.v1.Forms.Validation.Validation.isAlphaNumeric = function js_com_cs_v1_Forms_Validation_Validation$isAlphaNumeric(str) {
    /// <param name="str" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    return js.com.cs.v1.Forms.Validation.Validation.containOnlyCharacters(str, 'a-zA-Z0-9_');
}
js.com.cs.v1.Forms.Validation.Validation.isCreditCardNumber = function js_com_cs_v1_Forms_Validation_Validation$isCreditCardNumber(str) {
    /// <param name="str" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    var r = new RegExp('^[0-9]{15,16}$');
    return r.test(str);
}
js.com.cs.v1.Forms.Validation.Validation.isDate = function js_com_cs_v1_Forms_Validation_Validation$isDate(str, parameters, outErrorMsg, itemTitle) {
    /// <summary>
    /// Requires 'dojo.date.locale'
    /// </summary>
    /// <param name="str" type="String">
    /// </param>
    /// <param name="parameters" type="js.com.cs.v1.Forms.Validation.VALIDATION_PARAMETERS">
    /// </param>
    /// <param name="outErrorMsg" type="js.com.cs.v1.Forms.Validation.OUTPUT_ERROR_MSG">
    /// </param>
    /// <param name="itemTitle" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    if (!isNullOrUndefined(itemTitle)) {
        itemTitle = 'Date';
    }
    var dateFormat = parameters.dateFormat;
    if (String.isNullOrEmpty(dateFormat)) {
        dateFormat = 'dd/MM/yyyy';
    }
    var dateRegEx = new RegExp('[-.]', 'g');
    dateFormat = dateFormat.replace(dateRegEx, '/');
    var dFormatOptions = {};
    dFormatOptions.datePattern = dateFormat;
    var selector = null;
    dFormatOptions.selector = selector;
    var d = dojo.date.locale.parse(str, dFormatOptions);
    if (isNullOrUndefined(d)) {
        selector = 'date';
        dFormatOptions.selector = selector;
        d = dojo.date.locale.parse(str, dFormatOptions);
    }
    if (!isNullOrUndefined(d)) {
        if (!isNullOrUndefined(parameters.dateFrom) && !isNullOrUndefined(parameters.dateTo)) {
            if (parameters.dateFrom > parameters.dateTo) {
                var tmp = parameters.dateFrom;
                parameters.dateFrom = parameters.dateTo;
                parameters.dateTo = tmp;
            }
            if (d < parameters.dateFrom || d > parameters.dateTo) {
                if (!isNullOrUndefined(outErrorMsg)) {
                    outErrorMsg.errorMessage = itemTitle + ' must be between or equal to ' + dojo.date.locale.format(parameters.dateFrom, dFormatOptions) + ' and ' + dojo.date.locale.format(parameters.dateTo, dFormatOptions);
                }
                return false;
            }
        }
        else {
            if (!isNullOrUndefined(parameters.dateFrom) && d < parameters.dateFrom) {
                if (!isNullOrUndefined(outErrorMsg)) {
                    outErrorMsg.errorMessage = itemTitle + ' must be after or equal to ' + dojo.date.locale.format(parameters.dateFrom, dFormatOptions);
                }
                return false;
            }
        }
    }
    else {
        if (!isNullOrUndefined(outErrorMsg)) {
            outErrorMsg.errorMessage = itemTitle + ' - Invalid Date';
        }
        return false;
    }
    return true;
}
js.com.cs.v1.Forms.Validation.Validation.isValueIn = function js_com_cs_v1_Forms_Validation_Validation$isValueIn(item, values, caseSensitive) {
    /// <param name="item" type="String">
    /// </param>
    /// <param name="values" type="js.com.cs.v1.General.Arrays.MyArray">
    /// </param>
    /// <param name="caseSensitive" type="Boolean">
    /// </param>
    /// <returns type="Boolean"></returns>
    if (!caseSensitive) {
        item = item.toLowerCase();
    }
    for (var i = 0; i < values.get_length(); i++) {
        var cmp = values.get_item(i).toString();
        if (!caseSensitive) {
            cmp = cmp.toLowerCase();
        }
        if (item === cmp) {
            return true;
        }
    }
    return false;
}
js.com.cs.v1.Forms.Validation.Validation.isValueNotIn = function js_com_cs_v1_Forms_Validation_Validation$isValueNotIn(item, values, caseSensitive) {
    /// <param name="item" type="String">
    /// </param>
    /// <param name="values" type="js.com.cs.v1.General.Arrays.MyArray">
    /// </param>
    /// <param name="caseSensitive" type="Boolean">
    /// </param>
    /// <returns type="Boolean"></returns>
    return js.com.cs.v1.Forms.Validation.Validation.isValueIn(item, values, caseSensitive);
}
js.com.cs.v1.Forms.Validation.Validation.isIPAddress = function js_com_cs_v1_Forms_Validation_Validation$isIPAddress(str) {
    /// <param name="str" type="String">
    /// </param>
    /// <returns type="Boolean"></returns>
    var r = new RegExp('^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$');
    return r.test(str);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Forms.Validation.WordsLimit

js.com.cs.v1.Forms.Validation.WordsLimit = function js_com_cs_v1_Forms_Validation_WordsLimit(txt, amtLimit, elemDisplayRemaining) {
    /// <param name="txt" type="js.com.cs.v1.Controls.Form.MyTextBox">
    /// </param>
    /// <param name="amtLimit" type="Number" integer="true">
    /// </param>
    /// <param name="elemDisplayRemaining" type="js.com.cs.v1.Controls.Common.MyDOMElement">
    /// </param>
    /// <field name="_elemDisplayText$1" type="js.com.cs.v1.Controls.Common.MyDOMElement">
    /// </field>
    js.com.cs.v1.Forms.Validation.WordsLimit.constructBase(this, [ txt, amtLimit, elemDisplayRemaining, true ]);
}
js.com.cs.v1.Forms.Validation.WordsLimit.prototype = {
    _elemDisplayText$1: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Forms.Validation.WordsOrCharsLimit

js.com.cs.v1.Forms.Validation.WordsOrCharsLimit = function js_com_cs_v1_Forms_Validation_WordsOrCharsLimit(txt, amtLimit, elemDisplayRemaining, words) {
    /// <param name="txt" type="js.com.cs.v1.Controls.Form.MyTextBox">
    /// </param>
    /// <param name="amtLimit" type="Number" integer="true">
    /// </param>
    /// <param name="elemDisplayRemaining" type="js.com.cs.v1.Controls.Common.MyDOMElement">
    /// </param>
    /// <param name="words" type="Boolean">
    /// </param>
    /// <field name="_txt" type="js.com.cs.v1.Controls.Form.MyTextBox">
    /// </field>
    /// <field name="_amtLimit" type="Number" integer="true">
    /// </field>
    /// <field name="_words" type="Boolean">
    /// </field>
    /// <field name="_elemDisplayText" type="js.com.cs.v1.Controls.Common.MyDOMElement">
    /// </field>
    /// <field name="__onChange" type="js.com.cs.v1.Forms.Validation.AmtRemainingOnChangeHandler">
    /// </field>
    if (!(Type.canCast(txt, js.com.cs.v1.Controls.Form.MyTextBox))) {
        txt = js.com.cs.v1.Controls.Form.MyTextBox.getTextBoxFromElement(txt);
    }
    this._txt = txt;
    this._amtLimit = amtLimit;
    if (Type.canCast(elemDisplayRemaining, js.com.cs.v1.Controls.Common.MyDOMElement)) {
        this._elemDisplayText = elemDisplayRemaining;
    }
    else {
        this._elemDisplayText = new js.com.cs.v1.Controls.Common.MyDOMElement(elemDisplayRemaining);
    }
    if (isNullOrUndefined(words)) {
        words = true;
    }
    this._words = words;
    dojoClass.addOnLoad(Delegate.create(this, this._init));
}
js.com.cs.v1.Forms.Validation.WordsOrCharsLimit.prototype = {
    _txt: null,
    _amtLimit: 0,
    _words: false,
    _elemDisplayText: null,
    
    _update: function js_com_cs_v1_Forms_Validation_WordsOrCharsLimit$_update() {
        if (this._words) {
            var words = js.com.cs.v1.Util.StringUtil.getWords(this._txt.get_text());
            var amtWords = words.get_length();
            var wordsRemaining = this._amtLimit - amtWords;
            if (wordsRemaining < 0) {
                var wordIndex = js.com.cs.v1.Util.StringUtil.getWordIndex(this._txt.get_text(), this._amtLimit);
                this._txt.set_text(this._txt.get_text().substring(0, wordIndex));
                wordsRemaining = 0;
            }
            var str = '<strong>' + wordsRemaining + '</strong> word';
            if (wordsRemaining !== 1) {
                str += 's';
            }
            str += ' remaining.';
            if (!isNullOrUndefined(this._elemDisplayText)) {
                this._elemDisplayText.set_innerHTML(str);
            }
            if (this.__onChange != null) {
                this.__onChange.invoke(wordsRemaining);
            }
        }
        else {
            var amtChars = this._txt.get_text().length;
            var charsRemaining = this._amtLimit - amtChars;
            charsRemaining = Math.max(0, charsRemaining);
            if (this._txt.get_text().length > this._amtLimit) {
                this._txt.set_text(this._txt.get_text().substring(0, this._amtLimit));
            }
            var str = '<strong>' + charsRemaining + '</strong> character';
            if (charsRemaining !== 1) {
                str += 's';
            }
            str += ' remaining.';
            if (!isNullOrUndefined(this._elemDisplayText)) {
                this._elemDisplayText.set_innerHTML(str);
            }
            if (this.__onChange != null) {
                this.__onChange.invoke(charsRemaining);
            }
        }
    },
    
    _init: function js_com_cs_v1_Forms_Validation_WordsOrCharsLimit$_init() {
        this._txt.add_onKeyUp(Delegate.create(this, this._update));
        this._txt.add_onChange(Delegate.create(this, this._update));
        this._update();
    },
    
    add_onChange: function js_com_cs_v1_Forms_Validation_WordsOrCharsLimit$add_onChange(value) {
        /// <param name="value" type="Function" />
        this.__onChange = Delegate.combine(this.__onChange, value);
    },
    remove_onChange: function js_com_cs_v1_Forms_Validation_WordsOrCharsLimit$remove_onChange(value) {
        /// <param name="value" type="Function" />
        this.__onChange = Delegate.remove(this.__onChange, value);
    },
    
    __onChange: null
}


Type.createNamespace('js.com.cs.v1.General.Arrays');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.General.Arrays.MyArray

js.com.cs.v1.General.Arrays.MyArray = function js_com_cs_v1_General_Arrays_MyArray(array) {
    /// <param name="array" type="Array">
    /// </param>
    /// <field name="_array" type="Array">
    /// </field>
    if (array == null) {
        array = [];
    }
    this._array = array.clone();
}
js.com.cs.v1.General.Arrays.MyArray.prototype = {
    
    getBaseArray: function js_com_cs_v1_General_Arrays_MyArray$getBaseArray() {
        /// <returns type="Array"></returns>
        return this._array;
    },
    
    _array: null,
    
    push: function js_com_cs_v1_General_Arrays_MyArray$push(obj) {
        /// <param name="obj" type="Object">
        /// </param>
        this._array.push(obj);
    },
    
    pop: function js_com_cs_v1_General_Arrays_MyArray$pop() {
        this._array.pop();
    },
    
    _addRange: function js_com_cs_v1_General_Arrays_MyArray$_addRange(array) {
        /// <param name="array" type="Array">
        /// </param>
        for (var i = 0; i < array.length; i++) {
            this.push(array[i]);
        }
    },
    
    addRange: function js_com_cs_v1_General_Arrays_MyArray$addRange(array) {
        /// <param name="array" type="js.com.cs.v1.General.Arrays.MyArray">
        /// </param>
        for (var i = 0; i < array.get_length(); i++) {
            this.push(array.get_item(i));
        }
    },
    
    _slice: function js_com_cs_v1_General_Arrays_MyArray$_slice(indexFrom, indexTo) {
        /// <param name="indexFrom" type="Number" integer="true">
        /// </param>
        /// <param name="indexTo" type="Number" integer="true">
        /// </param>
        /// <returns type="Array"></returns>
        var arr = this._array.slice(indexFrom, indexTo);
        return arr;
    },
    
    slice: function js_com_cs_v1_General_Arrays_MyArray$slice(indexFrom, indexTo) {
        /// <param name="indexFrom" type="Number" integer="true">
        /// </param>
        /// <param name="indexTo" type="Number" integer="true">
        /// </param>
        /// <returns type="js.com.cs.v1.General.Arrays.MyArray"></returns>
        var arr = new js.com.cs.v1.General.Arrays.MyArray(this._slice(indexFrom, indexTo));
        return arr;
    },
    
    _spliceRemove: function js_com_cs_v1_General_Arrays_MyArray$_spliceRemove(indexFrom, howManyToRemove) {
        /// <param name="indexFrom" type="Number" integer="true">
        /// </param>
        /// <param name="howManyToRemove" type="Number" integer="true">
        /// </param>
        /// <returns type="Array"></returns>
        var arr = this._array.splice(indexFrom, howManyToRemove);
        return arr;
    },
    
    _spliceAdd: function js_com_cs_v1_General_Arrays_MyArray$_spliceAdd(indexFrom, objToAdd) {
        /// <param name="indexFrom" type="Number" integer="true">
        /// </param>
        /// <param name="objToAdd" type="Object">
        /// </param>
        /// <returns type="Array"></returns>
        var arr = this._array.splice(indexFrom, 0, objToAdd);
        return arr;
    },
    
    insertAt: function js_com_cs_v1_General_Arrays_MyArray$insertAt(index, obj) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <param name="obj" type="Object">
        /// </param>
        this._spliceAdd(index, obj);
    },
    
    removeAt: function js_com_cs_v1_General_Arrays_MyArray$removeAt(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        this._spliceRemove(index, 1);
    },
    
    clear: function js_com_cs_v1_General_Arrays_MyArray$clear() {
        while (this.get_length() > 0) {
            this.removeAt(0);
        }
    },
    
    getItem: function js_com_cs_v1_General_Arrays_MyArray$getItem(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <returns type="Object"></returns>
        return this._array[index];
    },
    
    getLength: function js_com_cs_v1_General_Arrays_MyArray$getLength() {
        /// <returns type="Number" integer="true"></returns>
        return this._array.length;
    },
    
    getEnumerator: function js_com_cs_v1_General_Arrays_MyArray$getEnumerator() {
        /// <returns type="IEnumerator"></returns>
        return this._array.getEnumerator();
    },
    
    aggregate: function js_com_cs_v1_General_Arrays_MyArray$aggregate(seedValue, aggregator) {
        /// <param name="seedValue" type="Object">
        /// </param>
        /// <param name="aggregator" type="ArrayItemAggregator">
        /// </param>
        /// <returns type="Object"></returns>
        return this._array.aggregate(seedValue, aggregator);
    },
    
    clone: function js_com_cs_v1_General_Arrays_MyArray$clone() {
        /// <returns type="js.com.cs.v1.General.Arrays.MyArray"></returns>
        var item = new js.com.cs.v1.General.Arrays.MyArray();
        item._array = this._array.clone();
        return item;
    },
    
    concat: function js_com_cs_v1_General_Arrays_MyArray$concat(objects) {
        /// <param name="objects" type="Array" elementType="Object">
        /// </param>
        /// <returns type="js.com.cs.v1.General.Arrays.MyArray"></returns>
        var item = this.clone();
        item._array.concat(objects);
        return item;
    },
    
    contains: function js_com_cs_v1_General_Arrays_MyArray$contains(item) {
        /// <param name="item" type="Object">
        /// </param>
        /// <returns type="Boolean"></returns>
        return this._array.contains(item);
    },
    
    every: function js_com_cs_v1_General_Arrays_MyArray$every(itemFilterCallback) {
        /// <param name="itemFilterCallback" type="ArrayItemFilterCallback">
        /// </param>
        /// <returns type="Boolean"></returns>
        return this._array.every(itemFilterCallback);
    },
    
    extract: function js_com_cs_v1_General_Arrays_MyArray$extract(index, count) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <param name="count" type="Number" integer="true">
        /// </param>
        /// <returns type="js.com.cs.v1.General.Arrays.MyArray"></returns>
        var item = new js.com.cs.v1.General.Arrays.MyArray();
        item._array = this._array.extract(index, count);
        return item;
    },
    
    filter: function js_com_cs_v1_General_Arrays_MyArray$filter(itemFilterCallback) {
        /// <param name="itemFilterCallback" type="ArrayItemFilterCallback">
        /// </param>
        /// <returns type="js.com.cs.v1.General.Arrays.MyArray"></returns>
        var item = new js.com.cs.v1.General.Arrays.MyArray();
        item._array = this._array.filter(itemFilterCallback);
        return item;
    },
    
    forEach: function js_com_cs_v1_General_Arrays_MyArray$forEach(itemCallback) {
        /// <param name="itemCallback" type="ArrayItemCallback">
        /// </param>
        this._array.forEach(itemCallback);
    },
    
    indexOf: function js_com_cs_v1_General_Arrays_MyArray$indexOf(item) {
        /// <param name="item" type="Object">
        /// </param>
        /// <returns type="Number" integer="true"></returns>
        return this._array.indexOf(item);
    },
    
    join: function js_com_cs_v1_General_Arrays_MyArray$join(delimiter) {
        /// <param name="delimiter" type="String">
        /// </param>
        /// <returns type="String"></returns>
        return this._array.join(delimiter);
    },
    
    reverse: function js_com_cs_v1_General_Arrays_MyArray$reverse() {
        this._array.reverse();
    },
    
    some: function js_com_cs_v1_General_Arrays_MyArray$some(itemFilterCallback) {
        /// <param name="itemFilterCallback" type="ArrayItemFilterCallback">
        /// </param>
        /// <returns type="Boolean"></returns>
        return this._array.some(itemFilterCallback);
    },
    
    sort: function js_com_cs_v1_General_Arrays_MyArray$sort(compareCallback) {
        /// <param name="compareCallback" type="CompareCallback">
        /// </param>
        this._array.sort(compareCallback);
    },
    
    get_length: function js_com_cs_v1_General_Arrays_MyArray$get_length() {
        /// <value type="Number" integer="true"></value>
        return this._array.length;
    },
    get_item: function js_com_cs_v1_General_Arrays_MyArray$get_item(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <param name="value" type="Object">
        /// </param>
        /// <returns type="Object"></returns>
        return this._array[index];
    },
    set_item: function js_com_cs_v1_General_Arrays_MyArray$set_item(index, value) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <param name="value" type="Object">
        /// </param>
        /// <returns type="Object"></returns>
        this._array[index] = value;
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.General.Arrays.MyArrayInt

js.com.cs.v1.General.Arrays.MyArrayInt = function js_com_cs_v1_General_Arrays_MyArrayInt(array) {
    /// <param name="array" type="Array">
    /// </param>
    js.com.cs.v1.General.Arrays.MyArrayInt.constructBase(this, [ array ]);
}
js.com.cs.v1.General.Arrays.MyArrayInt.prototype = {
    
    push: function js_com_cs_v1_General_Arrays_MyArrayInt$push(obj) {
        /// <param name="obj" type="Number" integer="true">
        /// </param>
        this._array.push(obj);
    },
    
    addRange: function js_com_cs_v1_General_Arrays_MyArrayInt$addRange(array) {
        /// <param name="array" type="js.com.cs.v1.General.Arrays.MyArrayInt">
        /// </param>
        for (var i = 0; i < array.get_length(); i++) {
            this.push(array.get_item(i));
        }
    },
    
    getItem: function js_com_cs_v1_General_Arrays_MyArrayInt$getItem(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <returns type="Number" integer="true"></returns>
        return this._array[index];
    },
    get_item: function js_com_cs_v1_General_Arrays_MyArrayInt$get_item(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <param name="value" type="Number" integer="true">
        /// </param>
        /// <returns type="Number" integer="true"></returns>
        return this._array[index];
    },
    set_item: function js_com_cs_v1_General_Arrays_MyArrayInt$set_item(index, value) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <param name="value" type="Number" integer="true">
        /// </param>
        /// <returns type="Number" integer="true"></returns>
        this._array[index] = value;
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.General.Arrays.MyArrayString

js.com.cs.v1.General.Arrays.MyArrayString = function js_com_cs_v1_General_Arrays_MyArrayString(array) {
    /// <param name="array" type="Array">
    /// </param>
    js.com.cs.v1.General.Arrays.MyArrayString.constructBase(this, [ array ]);
}
js.com.cs.v1.General.Arrays.MyArrayString.prototype = {
    
    push: function js_com_cs_v1_General_Arrays_MyArrayString$push(obj) {
        /// <param name="obj" type="String">
        /// </param>
        this._array.push(obj);
    },
    
    addRange: function js_com_cs_v1_General_Arrays_MyArrayString$addRange(array) {
        /// <param name="array" type="js.com.cs.v1.General.Arrays.MyArrayString">
        /// </param>
        for (var i = 0; i < array.get_length(); i++) {
            this.push(array.get_item(i));
        }
    },
    
    getItem: function js_com_cs_v1_General_Arrays_MyArrayString$getItem(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <returns type="String"></returns>
        return this._array[index];
    },
    get_item: function js_com_cs_v1_General_Arrays_MyArrayString$get_item(index) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <param name="value" type="String">
        /// </param>
        /// <returns type="String"></returns>
        return this._array[index];
    },
    set_item: function js_com_cs_v1_General_Arrays_MyArrayString$set_item(index, value) {
        /// <param name="index" type="Number" integer="true">
        /// </param>
        /// <param name="value" type="String">
        /// </param>
        /// <returns type="String"></returns>
        this._array[index] = value;
        return value;
    }
}


Type.createNamespace('js.com.cs.v1.General');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.General.GeneralClass

js.com.cs.v1.General.GeneralClass = function js_com_cs_v1_General_GeneralClass() {
    /// <field name="_Body" type="js.com.cs.v1.Controls.Common.MyDOMElement" static="true">
    /// </field>
}
js.com.cs.v1.General.GeneralClass.getBody = function js_com_cs_v1_General_GeneralClass$getBody() {
    /// <returns type="js.com.cs.v1.Controls.Common.MyDOMElement"></returns>
    if (js.com.cs.v1.General.GeneralClass._Body == null) {
        js.com.cs.v1.General.GeneralClass._Body = new js.com.cs.v1.Controls.Common.MyDOMElement(document.body);
    }
    return js.com.cs.v1.General.GeneralClass._Body;
}
js.com.cs.v1.General.GeneralClass.getForms = function js_com_cs_v1_General_GeneralClass$getForms() {
    /// <returns type="Array" elementType="MyFormElement"></returns>
    var forms = document.forms;
    var a = new js.com.cs.v1.General.Arrays.MyArray();
    for (var i = 0; i < forms.length; i++) {
        a.push(new js.com.cs.v1.Controls.Common.MyFormElement(forms[i]));
    }
    return a.getBaseArray();
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.General.ListItem

js.com.cs.v1.General.ListItem = function js_com_cs_v1_General_ListItem(txt, value) {
    /// <param name="txt" type="String">
    /// </param>
    /// <param name="value" type="String">
    /// </param>
    /// <field name="text" type="String">
    /// </field>
    /// <field name="value" type="String">
    /// </field>
    this.text = txt;
    this.value = value;
}
js.com.cs.v1.General.ListItem.prototype = {
    text: null,
    value: null,
    
    getOptionElement: function js_com_cs_v1_General_ListItem$getOptionElement() {
        /// <returns type="Object" domElement="true"></returns>
        var opt = document.createElement('option');
        opt.text = this.text;
        opt.value = this.value;
        return opt;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.General.General

js.com.cs.v1.General.General = function js_com_cs_v1_General_General() {
}


Type.createNamespace('js.com.cs.v1.UI.Forms');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.UI.Forms.Button

js.com.cs.v1.UI.Forms.Button = function js_com_cs_v1_UI_Forms_Button(element, validateFormOnClick, validationGroup, defaultButton, confirmMessage, buttonForAjax) {
    /// <param name="element" type="Object" domElement="true">
    /// </param>
    /// <param name="validateFormOnClick" type="Boolean">
    /// </param>
    /// <param name="validationGroup" type="String">
    /// </param>
    /// <param name="defaultButton" type="Boolean">
    /// </param>
    /// <param name="confirmMessage" type="String">
    /// </param>
    /// <param name="buttonForAjax" type="Boolean">
    /// </param>
    /// <field name="myButton" type="js.com.cs.v1.Controls.Form.MyButton">
    /// </field>
    /// <field name="_defaultButton" type="Boolean">
    /// </field>
    /// <field name="validateFormOnClick" type="Boolean">
    /// </field>
    /// <field name="submitOnClick" type="Boolean">
    /// </field>
    /// <field name="validationGroup" type="String">
    /// </field>
    /// <field name="_confirmMessage" type="String">
    /// </field>
    /// <field name="form" type="js.com.cs.v1.UI.Forms.Form">
    /// </field>
    /// <field name="_onClickFunction" type="DOMEventHandler">
    /// </field>
    /// <field name="submitOnCtrlS" type="Boolean">
    /// </field>
    /// <field name="_buttonForAjax" type="Boolean">
    /// </field>
    /// <field name="_preValidation" type="js.com.cs.v1.General.Arrays.MyArray">
    /// </field>
    /// <field name="__postValidation" type="DOMEventHandler">
    /// </field>
    this._preValidation = new js.com.cs.v1.General.Arrays.MyArray();
    if (Type.canCast(element, String)) {
        element = dojoClass.byId(element);
    }
    this._buttonForAjax = !isNullOrUndefined(buttonForAjax);
    this.validateFormOnClick = validateFormOnClick;
    this.myButton = new js.com.cs.v1.Controls.Form.MyButton(element);
    this.validationGroup = validationGroup;
    this._defaultButton = defaultButton;
    this._confirmMessage = confirmMessage;
    this._resetOldClick();
    this._init();
}
js.com.cs.v1.UI.Forms.Button.prototype = {
    myButton: null,
    _defaultButton: false,
    validateFormOnClick: true,
    submitOnClick: false,
    validationGroup: null,
    _confirmMessage: null,
    form: null,
    _onClickFunction: null,
    submitOnCtrlS: true,
    
    get_id: function js_com_cs_v1_UI_Forms_Button$get_id() {
        /// <value type="String"></value>
        return this.myButton.get_id();
    },
    
    get_enabled: function js_com_cs_v1_UI_Forms_Button$get_enabled() {
        /// <value type="Boolean"></value>
        return !this.myButton.get_disabled();
    },
    set_enabled: function js_com_cs_v1_UI_Forms_Button$set_enabled(value) {
        /// <value type="Boolean"></value>
        this.myButton.set_disabled(!value);
        this._updateEnabledClass();
        return value;
    },
    
    get_disabled: function js_com_cs_v1_UI_Forms_Button$get_disabled() {
        /// <value type="Boolean"></value>
        return !this.get_enabled();
    },
    set_disabled: function js_com_cs_v1_UI_Forms_Button$set_disabled(value) {
        /// <value type="Boolean"></value>
        this.set_enabled(!value);
        return value;
    },
    
    toString: function js_com_cs_v1_UI_Forms_Button$toString() {
        /// <returns type="String"></returns>
        return '[com.cs.ui.form.Button]';
    },
    
    isDefaultButton: function js_com_cs_v1_UI_Forms_Button$isDefaultButton() {
        /// <returns type="Boolean"></returns>
        if (this._defaultButton) {
            return this._defaultButton;
        }
        else {
            if (this.form.getDefaultButton() === this) {
                return true;
            }
        }
        return false;
    },
    
    _resetOldClick: function js_com_cs_v1_UI_Forms_Button$_resetOldClick() {
        var elem = this.myButton.get_myDomElement().domElement;
        var oldClickFunc = elem.onclick;
        if (Type.canCast(oldClickFunc, String)) {
            try {
                var code = oldClickFunc;
                oldClickFunc = new Function(code);
            }
            catch ($e1) {
            }
        }
        this.myButton.get_myDomElement().domElement.onclick = null;
        this.attachPreValidationHandler(oldClickFunc);
    },
    
    _buttonForAjax: false,
    
    get_buttonForAjax: function js_com_cs_v1_UI_Forms_Button$get_buttonForAjax() {
        /// <value type="Boolean"></value>
        return this._buttonForAjax;
    },
    set_buttonForAjax: function js_com_cs_v1_UI_Forms_Button$set_buttonForAjax(value) {
        /// <value type="Boolean"></value>
        this._buttonForAjax = value;
        return value;
    },
    
    attachPreValidationHandler: function js_com_cs_v1_UI_Forms_Button$attachPreValidationHandler(preValidationHandler) {
        /// <param name="preValidationHandler" type="Function">
        /// </param>
        this._preValidation.insertAt(0 + this._preValidation.get_length() - 1, preValidationHandler);
    },
    
    add_postValidation: function js_com_cs_v1_UI_Forms_Button$add_postValidation(value) {
        /// <param name="value" type="Function" />
        this.__postValidation = Delegate.combine(this.__postValidation, value);
    },
    remove_postValidation: function js_com_cs_v1_UI_Forms_Button$remove_postValidation(value) {
        /// <param name="value" type="Function" />
        this.__postValidation = Delegate.remove(this.__postValidation, value);
    },
    
    __postValidation: null,
    
    _btnMouseDown: function js_com_cs_v1_UI_Forms_Button$_btnMouseDown() {
        js.com.cs.v1.UI.Forms.FormsCollection.CLICKED_BUTTON = true;
        js.com.cs.v1.UI.Forms.FormsCollection.get_instance().currentForm = this.form;
    },
    
    _btnMouseUp: function js_com_cs_v1_UI_Forms_Button$_btnMouseUp() {
    },
    
    _btnFocus: function js_com_cs_v1_UI_Forms_Button$_btnFocus() {
        js.com.cs.v1.UI.Forms.FormsCollection.get_instance().currentForm = this.form;
    },
    
    _btnClick: function js_com_cs_v1_UI_Forms_Button$_btnClick() {
        js.com.cs.v1.UI.Forms.FormsCollection.CLICKED_BUTTON = true;
        js.com.cs.v1.UI.Forms.FormsCollection.get_instance().currentForm = this.form;
        if (String.isNullOrEmpty(this._confirmMessage) || (!String.isNullOrEmpty(this._confirmMessage) && confirm(this._confirmMessage))) {
            var ok = true;
            if (ok) {
                for (var i = 0; i < this._preValidation.get_length(); i++) {
                    var preValHandler = this._preValidation.get_item(i);
                    if (preValHandler != null) {
                        ok = preValHandler.call(this.myButton.get_myDomElement().domElement);
                        if (isNullOrUndefined(ok)) {
                            ok = true;
                        }
                    }
                    if (!ok) {
                        break;
                    }
                }
            }
            js.com.cs.v1.UI.Forms.FormsCollection.get_instance().currentForm = this.form;
            if (ok) {
                if (this.validateFormOnClick || (this._buttonForAjax && this._defaultButton)) {
                    ok = (js.com.cs.v1.UI.Forms.FormsCollection.get_instance().validateCurrentForm().length === 0);
                    if (this._buttonForAjax && this._defaultButton) {
                        this.form.submit(false, false);
                    }
                }
            }
            if (ok && this.__postValidation != null) {
                this.__postValidation.invoke();
            }
        }
        js.com.cs.v1.UI.Forms.FormsCollection.CLICKED_BUTTON = false;
    },
    
    _removeAllCSSClasses: function js_com_cs_v1_UI_Forms_Button$_removeAllCSSClasses() {
        this.myButton.removeClass(js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance.CLASS_BUTTON_OVER);
        this.myButton.removeClass(js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance.CLASS_BUTTON_DISABLED);
        this.myButton.removeClass(js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance.CLASS_BUTTON_UP);
    },
    
    _updateEnabledClass: function js_com_cs_v1_UI_Forms_Button$_updateEnabledClass() {
        if (this.myButton.get_myDomElement().domElement.disabled && !js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance.NotUsed && js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance.CLASS_BUTTON_DISABLED != null) {
            this._removeAllCSSClasses();
            this.myButton.addClass(js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance.CLASS_BUTTON_DISABLED);
        }
        else {
            this._btnMouseOut();
        }
    },
    
    _btnMouseOver: function js_com_cs_v1_UI_Forms_Button$_btnMouseOver() {
        if (!this.myButton.get_disabled() && !js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance.NotUsed && js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance.CLASS_BUTTON_OVER != null) {
            this._removeAllCSSClasses();
            this.myButton.addClass(js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance.CLASS_BUTTON_OVER);
            var className = this.myButton.get_myDomElement().domElement.className;
            className = this.myButton.get_myDomElement().domElement.className;
            className = this.myButton.get_myDomElement().domElement.className;
            className = this.myButton.get_myDomElement().domElement.className;
        }
    },
    
    _btnMouseOut: function js_com_cs_v1_UI_Forms_Button$_btnMouseOut() {
        if (!this.myButton.get_disabled() && !js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance.NotUsed && js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance.CLASS_BUTTON_UP != null) {
            this._removeAllCSSClasses();
            this.myButton.addClass(js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance.CLASS_BUTTON_UP);
        }
    },
    
    _initKeyEvent: function js_com_cs_v1_UI_Forms_Button$_initKeyEvent() {
        var body = new js.com.cs.v1.Controls.Common.MyDOMElement(dojoClass.body());
        body.add_onKeyPressWithEvent(Delegate.create(this, this._body_onKeyPressWithEvent));
    },
    
    _body_onKeyPressWithEvent: function js_com_cs_v1_UI_Forms_Button$_body_onKeyPressWithEvent(sender, e) {
        /// <param name="sender" type="Object">
        /// </param>
        /// <param name="e" type="Event">
        /// </param>
    },
    
    _initHandlers: function js_com_cs_v1_UI_Forms_Button$_initHandlers() {
        this._onClickFunction = this.myButton.get_myDomElement().domElement.onclick;
        this.myButton.add_onMouseDown(Delegate.create(this, this._btnMouseDown));
        this.myButton.add_onMouseUp(Delegate.create(this, this._btnMouseUp));
        this.myButton.add_onMouseOver(Delegate.create(this, this._btnMouseOver));
        this.myButton.add_onMouseOut(Delegate.create(this, this._btnMouseOut));
        this.myButton.add_onFocus(Delegate.create(this, this._btnFocus));
        this.myButton.add_onClick(Delegate.create(this, this._btnClick));
        this._btnMouseOut();
        this._initKeyEvent();
    },
    
    _initButtonWithForm: function js_com_cs_v1_UI_Forms_Button$_initButtonWithForm() {
        js.com.cs.v1.UI.Forms.FormsCollection.get_instance().addButton(this);
    },
    
    _init: function js_com_cs_v1_UI_Forms_Button$_init() {
        this._initButtonWithForm();
        this._initHandlers();
    },
    
    get_defaultButton: function js_com_cs_v1_UI_Forms_Button$get_defaultButton() {
        /// <value type="Boolean"></value>
        return this._defaultButton;
    },
    set_defaultButton: function js_com_cs_v1_UI_Forms_Button$set_defaultButton(value) {
        /// <value type="Boolean"></value>
        this._defaultButton = value;
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.UI.Forms.CheckBoxListRequired

js.com.cs.v1.UI.Forms.CheckBoxListRequired = function js_com_cs_v1_UI_Forms_CheckBoxListRequired(id, hiddenFieldID) {
    /// <param name="id" type="String">
    /// </param>
    /// <param name="hiddenFieldID" type="String">
    /// </param>
    /// <field name="_checkboxListId" type="String">
    /// </field>
    /// <field name="_hiddenField" type="js.com.cs.v1.Controls.Form.MyTextBox">
    /// </field>
    /// <field name="_checkboxes" type="Array" elementType="MyCheckBox">
    /// Array of 'MyCheckBox'
    /// </field>
    this._checkboxes = [];
    this._checkboxListId = new String();
    this._checkboxListId = id;
    this._hiddenField = new js.com.cs.v1.Controls.Form.MyTextBoxHidden(hiddenFieldID);
    dojoClass.addOnLoad(Delegate.create(this, this._init));
}
js.com.cs.v1.UI.Forms.CheckBoxListRequired.prototype = {
    _checkboxListId: null,
    _hiddenField: null,
    _checkboxes: null,
    
    _chkChange: function js_com_cs_v1_UI_Forms_CheckBoxListRequired$_chkChange() {
        var oneSelected = false;
        var oneEnabled = false;
        for (var i = 0; i < this._checkboxes.length; i++) {
            var chk = this._checkboxes[i];
            oneSelected = (oneSelected || chk.get_checked());
            oneEnabled = (oneEnabled || !chk.get_disabled());
        }
        if (oneSelected || !oneEnabled) {
            this._hiddenField.set_text('OK');
        }
        else {
            this._hiddenField.set_text('');
        }
        this._hiddenField.set_disabled(!oneEnabled);
    },
    
    _initCheckBoxes: function js_com_cs_v1_UI_Forms_CheckBoxListRequired$_initCheckBoxes() {
        var i = 0;
        var chk = null;
        var domElem;
        do {
            domElem = document.getElementById(this._checkboxListId + '_' + i);
            if (domElem != null) {
                chk = new js.com.cs.v1.Controls.Form.MyCheckBox(domElem);
                this._checkboxes[this._checkboxes.length] = chk;
                chk.add_onChange(Delegate.create(this, this._chkChange));
                chk.add_onMouseUp(Delegate.create(this, this._chkChange));
                chk.add_onKeyUp(Delegate.create(this, this._chkChange));
                i++;
            }
        } while (domElem != null);
    },
    
    _init: function js_com_cs_v1_UI_Forms_CheckBoxListRequired$_init() {
        this._initCheckBoxes();
        this._chkChange();
    },
    
    _update: function js_com_cs_v1_UI_Forms_CheckBoxListRequired$_update() {
        this._chkChange();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.UI.Forms.DefaultCSSClasses

js.com.cs.v1.UI.Forms.DefaultCSSClasses = function js_com_cs_v1_UI_Forms_DefaultCSSClasses() {
    /// <field name="_Instance" type="js.com.cs.v1.UI.Forms.DefaultCSSClasses" static="true">
    /// </field>
    /// <field name="Instance" type="js.com.cs.v1.UI.Forms.DefaultCSSClasses" static="true">
    /// </field>
    /// <field name="CLASS_NOFOCUS" type="String">
    /// </field>
    /// <field name="CLASS_NOFOCUS_OVER" type="String">
    /// </field>
    /// <field name="CLASS_FOCUS" type="String">
    /// </field>
    /// <field name="CLASS_ERROR" type="String">
    /// </field>
    /// <field name="CLASS_ERROR_OVER" type="String">
    /// </field>
    /// <field name="CLASS_ERROR_FOCUS" type="String">
    /// </field>
    /// <field name="CLASS_DISABLED" type="String">
    /// </field>
    /// <field name="CLASS_READONLY" type="String">
    /// </field>
    /// <field name="CLASS_REQUIRED" type="String">
    /// </field>
    /// <field name="CLASS_BUTTON_UP" type="String">
    /// </field>
    /// <field name="CLASS_BUTTON_OVER" type="String">
    /// </field>
    /// <field name="CLASS_BUTTON_DISABLED" type="String">
    /// </field>
    /// <field name="NotUsed" type="Boolean">
    /// </field>
}
js.com.cs.v1.UI.Forms.DefaultCSSClasses.prototype = {
    CLASS_NOFOCUS: 'field-nofocus',
    CLASS_NOFOCUS_OVER: 'field-nofocus-over',
    CLASS_FOCUS: 'field-focus',
    CLASS_ERROR: 'field-error',
    CLASS_ERROR_OVER: 'field-error-over',
    CLASS_ERROR_FOCUS: 'field-errorfocus',
    CLASS_DISABLED: 'field-disabled',
    CLASS_READONLY: 'field-readonly',
    CLASS_REQUIRED: 'required',
    CLASS_BUTTON_UP: 'button',
    CLASS_BUTTON_OVER: 'button_over',
    CLASS_BUTTON_DISABLED: 'button_disabled',
    NotUsed: false
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.UI.Forms.DojoComboBox

js.com.cs.v1.UI.Forms.DojoComboBox = function js_com_cs_v1_UI_Forms_DojoComboBox(elementID) {
    /// <param name="elementID" type="String">
    /// </param>
    /// <field name="_combo" type="dijit.form.ComboBox">
    /// </field>
    /// <field name="_field" type="js.com.cs.v1.UI.Forms.Field">
    /// </field>
    /// <field name="_showingResults" type="Boolean">
    /// </field>
    this._field = js.com.cs.v1.UI.Forms.FormsCollection.get_instance().getFieldByID(elementID);
    this._combo = dijitClass.byId(elementID);
    this._field.add_onFocusChanged(Delegate.create(this, this._field_OnFocusChanged));
}
js.com.cs.v1.UI.Forms.DojoComboBox.prototype = {
    _combo: null,
    _field: null,
    _showingResults: false,
    
    _field_OnFocusChanged: function js_com_cs_v1_UI_Forms_DojoComboBox$_field_OnFocusChanged() {
        if (this._field.get_hasFocus()) {
            this._combo.focus();
        }
        else {
            this._combo.blur();
        }
    },
    
    _onChange: function js_com_cs_v1_UI_Forms_DojoComboBox$_onChange() {
        this._showingResults = this._combo._isShowingNow || false;
        this._field.element.set_valueObject(this._combo.getValue());
    },
    
    _onKeyPress: function js_com_cs_v1_UI_Forms_DojoComboBox$_onKeyPress() {
        if (window.event.keyCode === ScriptFX.UI.Key.enter) {
            if (!this._showingResults) {
                this._field._fieldFocus();
                js.com.cs.v1.UI.Forms.FormsCollection.get_instance().clickCurrentFormDefaultButton();
            }
            this._onChange();
        }
    },
    
    get_hasFocus: function js_com_cs_v1_UI_Forms_DojoComboBox$get_hasFocus() {
        /// <value type="Boolean"></value>
        return this._field.get_hasFocus();
    },
    set_hasFocus: function js_com_cs_v1_UI_Forms_DojoComboBox$set_hasFocus(value) {
        /// <value type="Boolean"></value>
        this._field.set_hasFocus(value);
        return value;
    },
    
    _initHandlers: function js_com_cs_v1_UI_Forms_DojoComboBox$_initHandlers() {
        this._combo.onKeyPress = Delegate.create(this, this._onKeyPress);
        this._combo.onKeyUp = Delegate.create(this, this._onChange);
        this._field.element.get_myDomElement().add_onFocus(Delegate.create(this, this._field_OnFocusChanged));
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.UI.Forms.Field

js.com.cs.v1.UI.Forms.Field = function js_com_cs_v1_UI_Forms_Field(element, title, validationParams, validationGroup, customCSSClasses, groupParams) {
    /// <param name="element" type="Object" domElement="true">
    /// </param>
    /// <param name="title" type="String">
    /// </param>
    /// <param name="validationParams" type="js.com.cs.v1.Forms.Validation.VALIDATION_PARAMETERS">
    /// </param>
    /// <param name="validationGroup" type="String">
    /// </param>
    /// <param name="customCSSClasses" type="js.com.cs.v1.UI.Forms.DefaultCSSClasses">
    /// </param>
    /// <param name="groupParams" type="js.com.cs.v1.UI.Forms.FIELDGROUP_PARAMETERS">
    /// </param>
    /// <field name="element" type="js.com.cs.v1.Controls.Form.IMyBaseFormElement">
    /// </field>
    /// <field name="form" type="js.com.cs.v1.UI.Forms.Form">
    /// </field>
    /// <field name="groups" type="Array" elementType="FieldGroup">
    /// </field>
    /// <field name="title" type="String">
    /// </field>
    /// <field name="requiredGroup" type="Object">
    /// </field>
    /// <field name="requiredGroupOne" type="Object">
    /// </field>
    /// <field name="_cssHandler" type="js.com.cs.v1.UI.Forms.FieldCSSHandler">
    /// </field>
    /// <field name="_fieldValidator" type="js.com.cs.v1.UI.Forms.FieldValidator">
    /// </field>
    /// <field name="_inputConstraint" type="js.com.cs.v1.UI.Forms.FieldInputConstraint">
    /// </field>
    /// <field name="_validationParams" type="js.com.cs.v1.Forms.Validation.VALIDATION_PARAMETERS">
    /// </field>
    /// <field name="_groupParams" type="js.com.cs.v1.UI.Forms.FIELDGROUP_PARAMETERS">
    /// </field>
    /// <field name="validationGroup" type="String">
    /// </field>
    /// <field name="_hasError" type="Boolean">
    /// </field>
    /// <field name="_hasFocus" type="Boolean">
    /// </field>
    /// <field name="__onFocusChanged" type="DOMEventHandler">
    /// </field>
    this.groups = [];
    var elementID = null;
    if (Type.canCast(element, String)) {
        elementID = element;
        element = document.getElementById(elementID);
    }
    if (element == null) {
        js.com.cs.v1.Util.Console.log('js.com.cs.v1.UI.Forms.Field::  Element \'' + elementID + '\' does not exist');
    }
    else {
        if (validationParams == null) {
            validationParams = {};
        }
        if (groupParams == null) {
            groupParams = new js.com.cs.v1.UI.Forms.FIELDGROUP_PARAMETERS();
        }
        this._validationParams = validationParams;
        this.validationGroup = validationGroup;
        this.title = title;
        this.element = js.com.cs.v1.Controls.Form.MyBaseFormElement.getFormElement(element);
        this._cssHandler = new js.com.cs.v1.UI.Forms.FieldCSSHandler(this, customCSSClasses);
        this._groupParams = groupParams;
        this._init();
    }
}
js.com.cs.v1.UI.Forms.Field.prototype = {
    element: null,
    form: null,
    title: null,
    requiredGroup: null,
    requiredGroupOne: null,
    _cssHandler: null,
    _fieldValidator: null,
    _inputConstraint: null,
    _validationParams: null,
    _groupParams: null,
    validationGroup: null,
    
    get_disabled: function js_com_cs_v1_UI_Forms_Field$get_disabled() {
        /// <value type="Boolean"></value>
        return this.element.get_disabled();
    },
    set_disabled: function js_com_cs_v1_UI_Forms_Field$set_disabled(value) {
        /// <value type="Boolean"></value>
        this.element.set_disabled(value);
        if (!value) {
            this.set_hasFocus(false);
        }
        this._cssHandler.update();
        return value;
    },
    
    get_required: function js_com_cs_v1_UI_Forms_Field$get_required() {
        /// <value type="Boolean"></value>
        return this._validationParams.isRequired;
    },
    set_required: function js_com_cs_v1_UI_Forms_Field$set_required(value) {
        /// <value type="Boolean"></value>
        this._validationParams.isRequired = value;
        this._cssHandler.update();
        return value;
    },
    
    _hasError: false,
    
    get_hasError: function js_com_cs_v1_UI_Forms_Field$get_hasError() {
        /// <value type="Boolean"></value>
        return this._hasError;
    },
    set_hasError: function js_com_cs_v1_UI_Forms_Field$set_hasError(value) {
        /// <value type="Boolean"></value>
        this._hasError = value;
        this._cssHandler.update();
        return value;
    },
    
    get_readOnly: function js_com_cs_v1_UI_Forms_Field$get_readOnly() {
        /// <value type="Boolean"></value>
        return this.element.get_myDomElement().get_readOnly();
    },
    set_readOnly: function js_com_cs_v1_UI_Forms_Field$set_readOnly(value) {
        /// <value type="Boolean"></value>
        this.element.get_myDomElement().set_readOnly(value);
        this._cssHandler.update();
        return value;
    },
    
    get_valueObject: function js_com_cs_v1_UI_Forms_Field$get_valueObject() {
        /// <value type="Object"></value>
        return this.element.get_valueObject();
    },
    set_valueObject: function js_com_cs_v1_UI_Forms_Field$set_valueObject(value) {
        /// <value type="Object"></value>
        this.element.set_valueObject(value);
        return value;
    },
    
    isEmpty: function js_com_cs_v1_UI_Forms_Field$isEmpty() {
        /// <returns type="Boolean"></returns>
        var val = this.get_valueObject();
        if (isNullOrUndefined(val) || (Type.canCast(val, String) && (String.isNullOrEmpty(val) || val === this._validationParams.initialEmptyText)) || (Type.canCast(val, Boolean) && !(val))) {
            return true;
        }
        return false;
    },
    
    getWords: function js_com_cs_v1_UI_Forms_Field$getWords() {
        /// <returns type="js.com.cs.v1.General.Arrays.MyArray"></returns>
        var val = this.get_valueObject();
        var arr = new js.com.cs.v1.General.Arrays.MyArray(val.split(' '));
        return arr;
    },
    
    get_id: function js_com_cs_v1_UI_Forms_Field$get_id() {
        /// <value type="String"></value>
        return this.element.get_myDomElement().get_id();
    },
    
    _fieldFocus: function js_com_cs_v1_UI_Forms_Field$_fieldFocus() {
        this.set_hasFocus(true);
        this._cssHandler.update();
        js.com.cs.v1.UI.Forms.FormsCollection.get_instance().set_fieldWithFocus(this);
        if (this.get_valueObject() === this._validationParams.initialEmptyText) {
            this.set_valueObject('');
        }
    },
    
    _fieldBlur: function js_com_cs_v1_UI_Forms_Field$_fieldBlur() {
        this.set_hasFocus(false);
        this._cssHandler.update();
        js.com.cs.v1.UI.Forms.FormsCollection.get_instance().set_fieldWithFocus(null);
        if (!this._validationParams.doNotValidateOnBlur) {
            this.validate(true);
        }
        if (this.isEmpty() && !String.isNullOrEmpty(this._validationParams.initialEmptyText)) {
            this.set_valueObject(this._validationParams.initialEmptyText);
        }
    },
    
    _initHandlers: function js_com_cs_v1_UI_Forms_Field$_initHandlers() {
        this.element.get_myDomElement().add_onFocus(Delegate.create(this, this._fieldFocus));
        this.element.get_myDomElement().add_onBlur(Delegate.create(this, this._fieldBlur));
    },
    
    _initFieldWithForm: function js_com_cs_v1_UI_Forms_Field$_initFieldWithForm() {
        js.com.cs.v1.UI.Forms.FormsCollection.get_instance().addField(this);
    },
    
    _initGroup: function js_com_cs_v1_UI_Forms_Field$_initGroup() {
        if (!isNullOrUndefined(this._groupParams)) {
            var groupID = this._groupParams.groupID;
            if (!isNullOrUndefined(groupID)) {
                var g = js.com.cs.v1.UI.Forms.FormsCollection.get_instance().getGroupByID(groupID);
                if (g != null && !(Type.canCast(g, js.com.cs.v1.UI.Forms.FieldGroup))) {
                    alert('An item with id\'' + groupID + '\' exists while it should be a group not a \'' + g + '\'.  Please change group id.');
                }
                if (!isNullOrUndefined(g)) {
                    g.addFieldToGroup(this);
                }
                else {
                    var tmp = [];
                    tmp[tmp.length] = this.get_id();
                    var newGroup = new js.com.cs.v1.UI.Forms.FieldGroup(tmp, this._groupParams, this.validationGroup, groupID);
                }
            }
        }
    },
    
    _init: function js_com_cs_v1_UI_Forms_Field$_init() {
        this._initFieldWithForm();
        this._initHandlers();
        this._inputConstraint = new js.com.cs.v1.UI.Forms.FieldInputConstraint(this, this._validationParams);
        this._fieldValidator = new js.com.cs.v1.UI.Forms.FieldValidator(this, this._validationParams);
        this._initGroup();
        if (this.isEmpty() && !String.isNullOrEmpty(this._validationParams.initialEmptyText)) {
            this.set_valueObject(this._validationParams.initialEmptyText);
        }
    },
    
    validate: function js_com_cs_v1_UI_Forms_Field$validate(showError) {
        /// <param name="showError" type="Boolean">
        /// </param>
        /// <returns type="String"></returns>
        var errorMsg = null;
        if (!this.element.get_disabled()) {
            errorMsg = this._fieldValidator.validate();
            if (showError && !isNullOrUndefined(errorMsg)) {
                this.set_hasError(true);
            }
            else {
                this.set_hasError(false);
            }
        }
        return errorMsg;
    },
    
    _hasFocus: false,
    
    get_hasFocus: function js_com_cs_v1_UI_Forms_Field$get_hasFocus() {
        /// <value type="Boolean"></value>
        return this._hasFocus;
    },
    set_hasFocus: function js_com_cs_v1_UI_Forms_Field$set_hasFocus(value) {
        /// <value type="Boolean"></value>
        var v = value;
        if (v && this.get_disabled()) {
            v = false;
        }
        this._hasFocus = v;
        if (this.__onFocusChanged != null) {
            this.__onFocusChanged.invoke();
        }
        return value;
    },
    
    add_onFocusChanged: function js_com_cs_v1_UI_Forms_Field$add_onFocusChanged(value) {
        /// <param name="value" type="Function" />
        this.__onFocusChanged = Delegate.combine(this.__onFocusChanged, value);
    },
    remove_onFocusChanged: function js_com_cs_v1_UI_Forms_Field$remove_onFocusChanged(value) {
        /// <param name="value" type="Function" />
        this.__onFocusChanged = Delegate.remove(this.__onFocusChanged, value);
    },
    
    __onFocusChanged: null,
    
    clear: function js_com_cs_v1_UI_Forms_Field$clear() {
        this.set_valueObject('');
    },
    
    toString: function js_com_cs_v1_UI_Forms_Field$toString() {
        /// <returns type="String"></returns>
        return '[com.cs.ui.form.Field - ' + this.get_id() + ']';
    },
    
    updateCss: function js_com_cs_v1_UI_Forms_Field$updateCss() {
        this._cssHandler.update();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.UI.Forms.FieldCSSHandler

js.com.cs.v1.UI.Forms.FieldCSSHandler = function js_com_cs_v1_UI_Forms_FieldCSSHandler(field, customCSSClasses) {
    /// <param name="field" type="js.com.cs.v1.UI.Forms.Field">
    /// </param>
    /// <param name="customCSSClasses" type="js.com.cs.v1.UI.Forms.DefaultCSSClasses">
    /// </param>
    /// <field name="_field" type="js.com.cs.v1.UI.Forms.Field">
    /// </field>
    /// <field name="_cssNoFocus" type="String">
    /// </field>
    /// <field name="_cssNoFocusOver" type="String">
    /// </field>
    /// <field name="_cssFocus" type="String">
    /// </field>
    /// <field name="_cssError" type="String">
    /// </field>
    /// <field name="_cssErrorOver" type="String">
    /// </field>
    /// <field name="_cssErrorFocus" type="String">
    /// </field>
    /// <field name="_cssDisabled" type="String">
    /// </field>
    /// <field name="_cssReadOnly" type="String">
    /// </field>
    /// <field name="_cssRequired" type="String">
    /// </field>
    /// <field name="_isMouseOver" type="Boolean">
    /// </field>
    /// <field name="_initCssClass" type="String">
    /// </field>
    this._initCssClass = field.element.get_myDomElement().domElement.className;
    this._field = field;
    if (isNullOrUndefined(customCSSClasses)) {
        customCSSClasses = js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance;
    }
    this._setCSSClasses(customCSSClasses);
    this.init();
}
js.com.cs.v1.UI.Forms.FieldCSSHandler.prototype = {
    _field: null,
    _cssNoFocus: null,
    _cssNoFocusOver: null,
    _cssFocus: null,
    _cssError: null,
    _cssErrorOver: null,
    _cssErrorFocus: null,
    _cssDisabled: null,
    _cssReadOnly: null,
    _cssRequired: null,
    _isMouseOver: false,
    _initCssClass: null,
    
    _mouseOver: function js_com_cs_v1_UI_Forms_FieldCSSHandler$_mouseOver() {
        this._isMouseOver = true;
        this.update();
    },
    
    _mouseOut: function js_com_cs_v1_UI_Forms_FieldCSSHandler$_mouseOut() {
        this._isMouseOver = false;
        this.update();
    },
    
    _removeAllCSS: function js_com_cs_v1_UI_Forms_FieldCSSHandler$_removeAllCSS() {
        var e = this._field.element.get_myDomElement();
        if (!String.isNullOrEmpty(this._cssNoFocus)) {
            e.removeClass(this._cssNoFocus);
        }
        if (!String.isNullOrEmpty(this._cssNoFocusOver)) {
            e.removeClass(this._cssNoFocusOver);
        }
        if (!String.isNullOrEmpty(this._cssFocus)) {
            e.removeClass(this._cssFocus);
        }
        if (!String.isNullOrEmpty(this._cssError)) {
            e.removeClass(this._cssError);
        }
        if (!String.isNullOrEmpty(this._cssErrorOver)) {
            e.removeClass(this._cssErrorOver);
        }
        if (!String.isNullOrEmpty(this._cssErrorFocus)) {
            e.removeClass(this._cssErrorFocus);
        }
        if (!String.isNullOrEmpty(this._cssDisabled)) {
            e.removeClass(this._cssDisabled);
        }
        if (!String.isNullOrEmpty(this._cssReadOnly)) {
            e.removeClass(this._cssReadOnly);
        }
        if (!String.isNullOrEmpty(this._cssRequired)) {
            e.removeClass(this._cssRequired);
        }
    },
    
    _updateCSS: function js_com_cs_v1_UI_Forms_FieldCSSHandler$_updateCSS(className) {
        /// <param name="className" type="String">
        /// </param>
        if (!String.isNullOrEmpty(className)) {
            this._removeAllCSS();
            this._field.element.get_myDomElement().addClass(this._initCssClass);
            this._field.element.get_myDomElement().addClass(className);
        }
    },
    
    update: function js_com_cs_v1_UI_Forms_FieldCSSHandler$update() {
        if (this._field.element.get_controlType() === js.com.cs.v1.Controls.Form.Enums.FORM_CONTROL_TYPE.checkBox || this._field.element.get_controlType() === js.com.cs.v1.Controls.Form.Enums.FORM_CONTROL_TYPE.radioButton) {
            return;
        }
        if (!this._field.get_disabled() && !this._field.get_readOnly()) {
            if (!this._field.get_hasFocus()) {
                if (this._field.get_hasError()) {
                    if (!this._isMouseOver) {
                        this._updateCSS(this._cssError);
                    }
                    else {
                        this._updateCSS(this._cssErrorOver);
                    }
                }
                else {
                    if (!this._isMouseOver) {
                        this._updateCSS(this._cssNoFocus);
                    }
                    else {
                        this._updateCSS(this._cssNoFocusOver);
                    }
                }
            }
            else {
                if (this._field.get_hasError()) {
                    this._updateCSS(this._cssErrorFocus);
                }
                else {
                    this._updateCSS(this._cssFocus);
                }
            }
        }
        else {
            if (this._field.get_disabled()) {
                this._updateCSS(this._cssDisabled);
            }
            else if (this._field.get_readOnly()) {
                this._updateCSS(this._cssReadOnly);
            }
        }
        if (this._field.get_required()) {
            this._field.element.get_myDomElement().addClass(this._cssRequired);
        }
    },
    
    init: function js_com_cs_v1_UI_Forms_FieldCSSHandler$init() {
        this._field.element.get_myDomElement().add_onMouseOver(Delegate.create(this, this._mouseOver));
        this._field.element.get_myDomElement().add_onMouseOut(Delegate.create(this, this._mouseOut));
        this.update();
    },
    
    _setCSSClasses: function js_com_cs_v1_UI_Forms_FieldCSSHandler$_setCSSClasses(cssClasses) {
        /// <param name="cssClasses" type="js.com.cs.v1.UI.Forms.DefaultCSSClasses">
        /// </param>
        if (!cssClasses.NotUsed) {
            this._cssNoFocus = ((!cssClasses.NotUsed && !String.isNullOrEmpty(cssClasses.CLASS_NOFOCUS)) ? cssClasses.CLASS_NOFOCUS : ((!js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance.NotUsed) ? js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance.CLASS_NOFOCUS : ''));
            this._cssNoFocusOver = ((!cssClasses.NotUsed && !String.isNullOrEmpty(cssClasses.CLASS_NOFOCUS_OVER)) ? cssClasses.CLASS_NOFOCUS_OVER : ((!js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance.NotUsed) ? js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance.CLASS_NOFOCUS_OVER : ''));
            this._cssFocus = ((!cssClasses.NotUsed && !String.isNullOrEmpty(cssClasses.CLASS_FOCUS)) ? cssClasses.CLASS_FOCUS : ((!js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance.NotUsed) ? js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance.CLASS_FOCUS : ''));
            this._cssError = ((!cssClasses.NotUsed && !String.isNullOrEmpty(cssClasses.CLASS_ERROR)) ? cssClasses.CLASS_ERROR : ((!js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance.NotUsed) ? js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance.CLASS_ERROR : ''));
            this._cssErrorOver = ((!cssClasses.NotUsed && !String.isNullOrEmpty(cssClasses.CLASS_ERROR_OVER)) ? cssClasses.CLASS_ERROR_OVER : ((!js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance.NotUsed) ? js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance.CLASS_ERROR_OVER : ''));
            this._cssErrorFocus = ((!cssClasses.NotUsed && !String.isNullOrEmpty(cssClasses.CLASS_ERROR_FOCUS)) ? cssClasses.CLASS_ERROR_FOCUS : ((!js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance.NotUsed) ? js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance.CLASS_ERROR_FOCUS : ''));
            this._cssDisabled = ((!cssClasses.NotUsed && !String.isNullOrEmpty(cssClasses.CLASS_DISABLED)) ? cssClasses.CLASS_DISABLED : ((!js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance.NotUsed) ? js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance.CLASS_DISABLED : ''));
            this._cssReadOnly = ((!cssClasses.NotUsed && !String.isNullOrEmpty(cssClasses.CLASS_READONLY)) ? cssClasses.CLASS_READONLY : ((!js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance.NotUsed) ? js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance.CLASS_READONLY : ''));
            this._cssRequired = ((!cssClasses.NotUsed && !String.isNullOrEmpty(cssClasses.CLASS_REQUIRED)) ? cssClasses.CLASS_REQUIRED : ((!js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance.NotUsed) ? js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance.CLASS_REQUIRED : ''));
        }
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.UI.Forms.FIELDGROUP_PARAMETERS

js.com.cs.v1.UI.Forms.FIELDGROUP_PARAMETERS = function js_com_cs_v1_UI_Forms_FIELDGROUP_PARAMETERS() {
    /// <field name="atLeastOneIsRequired" type="Boolean">
    /// </field>
    /// <field name="sameValues" type="Boolean">
    /// </field>
    /// <field name="groupID" type="String">
    /// </field>
}
js.com.cs.v1.UI.Forms.FIELDGROUP_PARAMETERS.prototype = {
    atLeastOneIsRequired: false,
    sameValues: false,
    groupID: null
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.UI.Forms.FieldGroup

js.com.cs.v1.UI.Forms.FieldGroup = function js_com_cs_v1_UI_Forms_FieldGroup(fieldIDs, groupParams, validationGroup, groupID) {
    /// <param name="fieldIDs" type="Array" elementType="String">
    /// </param>
    /// <param name="groupParams" type="js.com.cs.v1.UI.Forms.FIELDGROUP_PARAMETERS">
    /// </param>
    /// <param name="validationGroup" type="String">
    /// </param>
    /// <param name="groupID" type="String">
    /// </param>
    /// <field name="id" type="String">
    /// </field>
    /// <field name="_parameters" type="js.com.cs.v1.UI.Forms.FIELDGROUP_PARAMETERS">
    /// </field>
    /// <field name="validationGroup" type="String">
    /// </field>
    /// <field name="_groupID" type="String">
    /// </field>
    /// <field name="hasError" type="Boolean">
    /// </field>
    /// <field name="form" type="js.com.cs.v1.UI.Forms.Form">
    /// </field>
    /// <field name="_fieldIDs" type="Array" elementType="String">
    /// </field>
    /// <field name="_fields" type="Array" elementType="Field">
    /// </field>
    this.id = groupID;
    this._parameters = groupParams;
    this._fields = [];
    this._fieldIDs = fieldIDs;
    this.validationGroup = validationGroup;
    this._init();
}
js.com.cs.v1.UI.Forms.FieldGroup.prototype = {
    id: null,
    _parameters: null,
    validationGroup: null,
    _groupID: null,
    hasError: false,
    form: null,
    _fieldIDs: null,
    _fields: null,
    
    _initGroupWithForm: function js_com_cs_v1_UI_Forms_FieldGroup$_initGroupWithForm() {
        js.com.cs.v1.UI.Forms.FormsCollection.get_instance().addGroup(this);
    },
    
    _initFields: function js_com_cs_v1_UI_Forms_FieldGroup$_initFields() {
        for (var i = 0; i < this._fieldIDs.length; i++) {
            this.addFieldToGroup(this._fieldIDs[i]);
        }
    },
    
    _init: function js_com_cs_v1_UI_Forms_FieldGroup$_init() {
        this._initFields();
        this._initGroupWithForm();
    },
    
    _hasFieldsGotError: function js_com_cs_v1_UI_Forms_FieldGroup$_hasFieldsGotError() {
        /// <returns type="Boolean"></returns>
        for (var i = 0; i < this._fields.length; i++) {
            if (this._fields[i].get_hasError()) {
                return true;
            }
        }
        return false;
    },
    
    _getFieldsString: function js_com_cs_v1_UI_Forms_FieldGroup$_getFieldsString() {
        /// <returns type="String"></returns>
        var fieldsStr = '';
        for (var i = 0; i < this._fields.length; i++) {
            var f = this._fields[i];
            if (i > 0) {
                if (i === this._fields.length - 1) {
                    fieldsStr += ' & ';
                }
                else {
                    fieldsStr += ', ';
                }
            }
            fieldsStr += f.title;
        }
        return fieldsStr;
    },
    
    _isAtLeastOneFieldFilled: function js_com_cs_v1_UI_Forms_FieldGroup$_isAtLeastOneFieldFilled() {
        /// <returns type="Boolean"></returns>
        for (var i = 0; i < this._fields.length; i++) {
            if (!this._fields[i].isEmpty()) {
                return true;
            }
        }
        return false;
    },
    
    _setAllFieldsError: function js_com_cs_v1_UI_Forms_FieldGroup$_setAllFieldsError(error) {
        /// <param name="error" type="Boolean">
        /// </param>
        for (var i = 0; i < this._fields.length; i++) {
            this._fields[i].set_hasError(error);
        }
    },
    
    _validateAtLeastOneRequired: function js_com_cs_v1_UI_Forms_FieldGroup$_validateAtLeastOneRequired() {
        /// <returns type="js.com.cs.v1.UI.Forms.FormError"></returns>
        if (!this._isAtLeastOneFieldFilled()) {
            this._setAllFieldsError(true);
            return new js.com.cs.v1.UI.Forms.FormError(this, this._getFieldsString() + ' - At least one of the fields must be filled');
        }
        return null;
    },
    
    _validateAllSameValues: function js_com_cs_v1_UI_Forms_FieldGroup$_validateAllSameValues() {
        /// <returns type="js.com.cs.v1.UI.Forms.FormError"></returns>
        var value = null;
        for (var i = 0; i < this._fields.length; i++) {
            var f = this._fields[i];
            if (value == null) {
                value = f.get_valueObject();
            }
            else {
                if (f.get_valueObject() !== value) {
                    this._setAllFieldsError(true);
                    return new js.com.cs.v1.UI.Forms.FormError(this, this._getFieldsString() + ' - Value does not match');
                }
            }
        }
        return null;
    },
    
    validate: function js_com_cs_v1_UI_Forms_FieldGroup$validate(showError, focusOnFirstErrorField, validateEvenIfFieldsAlreadyHaveError) {
        /// <summary>
        /// Validates the group.  Returns a list of errors
        /// </summary>
        /// <param name="showError" type="Boolean">
        /// </param>
        /// <param name="focusOnFirstErrorField" type="Boolean">
        /// </param>
        /// <param name="validateEvenIfFieldsAlreadyHaveError" type="Boolean">
        /// </param>
        /// <returns type="js.com.cs.v1.UI.Forms.FormError"></returns>
        var errs = new js.com.cs.v1.General.Arrays.MyArray();
        var oneFieldFilled = false;
        var areFieldValuesSimilar = true;
        var lastValue = null;
        var allFieldsRequired = (!this._parameters.sameValues && !this._parameters.atLeastOneIsRequired);
        var firstErrorField = null;
        if (!validateEvenIfFieldsAlreadyHaveError) {
            if (this._hasFieldsGotError()) {
                return null;
            }
        }
        var fieldsStr = this._getFieldsString();
        var err = null;
        if (this._parameters.atLeastOneIsRequired) {
            err = this._validateAtLeastOneRequired();
        }
        else if (this._parameters.sameValues) {
            err = this._validateAllSameValues();
        }
        if (err != null && focusOnFirstErrorField && this._fields.length > 0) {
            this._fields[0].element.focus();
            this._fields[0].set_hasFocus(true);
        }
        return err;
    },
    
    validate2: function js_com_cs_v1_UI_Forms_FieldGroup$validate2(showError, focusOnFirstErrorField, validateEvenIfFieldsAlreadyHaveError) {
        /// <param name="showError" type="Boolean">
        /// </param>
        /// <param name="focusOnFirstErrorField" type="Boolean">
        /// </param>
        /// <param name="validateEvenIfFieldsAlreadyHaveError" type="Boolean">
        /// </param>
        /// <returns type="Array" elementType="FormError"></returns>
        var errs = new js.com.cs.v1.General.Arrays.MyArray();
        var oneFieldFilled = false;
        var areFieldValuesSimilar = true;
        var lastValue = null;
        var allFieldsRequired = (!this._parameters.sameValues && !this._parameters.atLeastOneIsRequired);
        var firstErrorField = null;
        if (!validateEvenIfFieldsAlreadyHaveError) {
            if (this._hasFieldsGotError()) {
                return errs.getBaseArray();
            }
        }
        var fieldsStr = this._getFieldsString();
        var err = null;
        if (focusOnFirstErrorField && firstErrorField != null) {
            firstErrorField.set_hasFocus(true);
        }
        return errs.getBaseArray();
    },
    
    addFieldToGroup: function js_com_cs_v1_UI_Forms_FieldGroup$addFieldToGroup(fieldID) {
        /// <param name="fieldID" type="String">
        /// </param>
        if (!(Type.canCast(fieldID, String))) {
            if (Type.canCast(fieldID, js.com.cs.v1.UI.Forms.Field)) {
                fieldID = (fieldID).get_id();
            }
            else {
                fieldID = (fieldID).id;
            }
        }
        var f = js.com.cs.v1.UI.Forms.FormsCollection.get_instance().getFieldByID(fieldID);
        if (f == null) {
            throw new Error('Field with id \'' + fieldID + '\' not found');
        }
        this._fields[this._fields.length] = f;
        f.groups[f.groups.length] = this;
    },
    
    toString: function js_com_cs_v1_UI_Forms_FieldGroup$toString() {
        /// <returns type="String"></returns>
        return '[com.cs.ui.form.FieldGroup - ' + this.id + ' (' + this._fields.length + ' fields)]';
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.UI.Forms.FieldInputConstraint

js.com.cs.v1.UI.Forms.FieldInputConstraint = function js_com_cs_v1_UI_Forms_FieldInputConstraint(field, validationParams) {
    /// <param name="field" type="js.com.cs.v1.UI.Forms.Field">
    /// </param>
    /// <param name="validationParams" type="js.com.cs.v1.Forms.Validation.VALIDATION_PARAMETERS">
    /// </param>
    /// <field name="_field" type="js.com.cs.v1.UI.Forms.Field">
    /// </field>
    /// <field name="_validationParams" type="js.com.cs.v1.Forms.Validation.VALIDATION_PARAMETERS">
    /// </field>
    /// <field name="_lastValue" type="String">
    /// </field>
    /// <field name="_regExpUnAllowedChars" type="RegExp">
    /// </field>
    /// <field name="_regExpAllowedPattern" type="RegExp">
    /// </field>
    /// <field name="_maX_INVALID_ATTEMPTS" type="Number" integer="true">
    /// </field>
    /// <field name="_invalidAttempt" type="Number" integer="true">
    /// </field>
    this._validationParams = validationParams;
    this._field = field;
    this._init();
}
js.com.cs.v1.UI.Forms.FieldInputConstraint.prototype = {
    _field: null,
    _validationParams: null,
    _lastValue: null,
    _regExpUnAllowedChars: null,
    _regExpAllowedPattern: null,
    _maX_INVALID_ATTEMPTS: 5,
    _invalidAttempt: 0,
    
    _onBlur: function js_com_cs_v1_UI_Forms_FieldInputConstraint$_onBlur() {
        if (this._validationParams.isDate) {
            var value = this._field.get_valueObject();
            value = value.replace(new RegExp('[-.]', 'g'), '/');
            this._field.set_valueObject(value);
        }
    },
    
    _initRegExp: function js_com_cs_v1_UI_Forms_FieldInputConstraint$_initRegExp() {
        var allowedChars = null;
        var allowedPattern = null;
        if (this._validationParams.isEmail) {
            allowedChars = 'a-zA-Z0-9@._%+-';
            allowedPattern = '^[a-zA-Z0-9._%+-]*$';
            allowedPattern += '|^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]*$';
        }
        else if (this._validationParams.isNumber) {
            allowedChars = '0-9';
            allowedPattern = '^[-+0-9][0-9.]*$';
            if (!this._validationParams.integersOnly) {
                allowedChars += '.';
            }
            if (!this._validationParams.negativeOnly) {
                allowedChars += '+';
            }
            else {
                allowedPattern = '^[-0-9][0-9.]*';
            }
            if (!this._validationParams.positiveOnly) {
                allowedChars += '-';
            }
            else {
                allowedPattern = '^[+0-9][0-9.]*';
            }
        }
        else if (this._validationParams.isCurrency) {
        }
        else if (this._validationParams.isCreditCardNumber) {
            allowedChars = '0-9';
            allowedPattern = '^[0-9]{0,16}$';
        }
        else if (this._validationParams.isIPAddress) {
            allowedChars = '0-9.';
            allowedPattern = '^[0-9]{0,3}$';
            allowedPattern += '|^[0-9]{0,3}\\.[0-9]{0,3}$';
            allowedPattern += '|^[0-9]{0,3}\\.[0-9]{0,3}\\.[0-9]{0,3}$';
            allowedPattern += '|^[0-9]{0,3}\\.[0-9]{0,3}\\.[0-9]{0,3}\\.[0-9]{0,3}$';
        }
        else if (this._validationParams.isDate) {
            allowedChars = '0-9/ :.amAMPMpm-';
            allowedPattern = '^[0-9]{0,2}$';
            allowedPattern += '|^[0-9]{0,2}[/.-][0-9]{0,2}$';
            allowedPattern += '|^[0-9]{0,2}[/.-][0-9]{0,2}[/.-][0-9]{0,4}$';
            allowedPattern += '|^[0-9]{0,2}[/.-][0-9]{0,2}[/.-][0-9]{0,4} [0-9]{0,2}$';
            allowedPattern += '|^[0-9]{0,2}[/.-][0-9]{0,2}[/.-][0-9]{0,4} [0-9]{0,2}[:][0-9]{0,2}$';
            allowedPattern += '|^[0-9]{0,2}[/.-][0-9]{0,2}[/.-][0-9]{0,4} [0-9]{0,2}[:][0-9]{0,2} ?(a|m|p|A|M|P|am|pm|AM|PM)?$';
            allowedPattern += '|^[0-9]{0,2}[/.-][0-9]{0,2}[/.-][0-9]{0,4} [0-9]{0,2}[:][0-9]{0,2}[:][0-9]{0,2}$';
            allowedPattern += '|^[0-9]{0,2}[/.-][0-9]{0,2}[/.-][0-9]{0,4} [0-9]{0,2}[:][0-9]{0,2}[:][0-9]{0,2} ?(a|m|p|A|M|P|am|pm|AM|PM)?$';
        }
        else if (this._validationParams.isAlphaNumeric) {
            allowedChars = 'a-zA-Z0-9_';
        }
        if (!String.isNullOrEmpty(allowedChars)) {
            this._regExpUnAllowedChars = new RegExp('[^' + allowedChars + ']+');
        }
        if (!String.isNullOrEmpty(allowedPattern)) {
            this._regExpAllowedPattern = new RegExp(allowedPattern);
        }
    },
    
    _showUnAllowedCharacters: function js_com_cs_v1_UI_Forms_FieldInputConstraint$_showUnAllowedCharacters(exceedLength, exceedWords) {
        /// <param name="exceedLength" type="Boolean">
        /// </param>
        /// <param name="exceedWords" type="Boolean">
        /// </param>
        var msg = 'The character you are trying to input in this field is not allowed.\r\n\r\n';
        if (this._validationParams.isEmail) {
            msg += 'Please enter a valid email address in this field, e.g. yourname@yourdomain.com.';
        }
        else if (this._validationParams.isNumber) {
            if (this._validationParams.positiveOnly) {
                msg += 'Please enter only valid positive ';
                if (this._validationParams.integersOnly) {
                    msg += 'whole ';
                }
                msg += 'numbers.';
            }
            else {
                if (this._validationParams.negativeOnly) {
                    msg += 'Please enter only valid negative ';
                    if (this._validationParams.integersOnly) {
                        msg += 'whole ';
                    }
                    msg += 'numbers.';
                }
                else {
                    msg += 'Please enter a number.';
                }
            }
        }
        else if (this._validationParams.isDate) {
            msg += 'Please enter a valid date in this field, e.g. 16/04/2008 03:32.';
        }
        else if (this._validationParams.isAlphaNumeric) {
            msg += 'Please enter only alpha numerical characters in this field.';
        }
        else if (this._validationParams.isIPAddress) {
            msg += 'Please enter a valid IP address in this field, e.g. 192.168.2.10';
        }
        else if (this._validationParams.isCreditCardNumber) {
            msg += 'Please enter a valid credit card number, e.g. 4552 7204 1234 5678';
        }
        alert(msg);
    },
    
    _onChange: function js_com_cs_v1_UI_Forms_FieldInputConstraint$_onChange() {
        var newValue = this._field.get_valueObject();
        if (!String.isNullOrEmpty(newValue)) {
            var isCharactersUnallowed = false;
            var isPatternAllowed = true;
            if (!isNullOrUndefined(this._regExpUnAllowedChars)) {
                isCharactersUnallowed = this._regExpUnAllowedChars.test(newValue);
            }
            if (!isNullOrUndefined(this._regExpAllowedPattern)) {
                isPatternAllowed = this._regExpAllowedPattern.test(newValue);
            }
            var ok = !isCharactersUnallowed && isPatternAllowed;
            var exceedLength = false;
            var exceedWords = false;
            if (this._validationParams.maxLength > 0) {
                exceedLength = newValue.length > this._validationParams.maxLength;
            }
            if (this._validationParams.maxWords > 0) {
                exceedWords = this._field.getWords().get_length() > this._validationParams.maxWords;
            }
            if (!ok || exceedLength || exceedWords) {
                this._field.set_valueObject(this._lastValue);
                if (!ok) {
                    this._invalidAttempt++;
                    if (this._invalidAttempt === this._maX_INVALID_ATTEMPTS) {
                        this._invalidAttempt = 0;
                        this._showUnAllowedCharacters(exceedLength, exceedWords);
                    }
                }
                else if (exceedLength) {
                    alert('You cannot enter more than ' + this._validationParams.maxLength + ' character' + ((this._validationParams.maxLength === 1) ? '' : 's') + ' in this field.');
                }
                else if (exceedWords) {
                    alert('You cannot enter more than ' + this._validationParams.maxWords + ' word' + ((this._validationParams.maxLength === 1) ? '' : 's') + ' in this field.');
                }
            }
            else {
                this._lastValue = newValue;
            }
        }
    },
    
    _initHandlers: function js_com_cs_v1_UI_Forms_FieldInputConstraint$_initHandlers() {
        if (this._field.element.get_controlType() !== js.com.cs.v1.Controls.Form.Enums.FORM_CONTROL_TYPE.checkBox && this._field.element.get_controlType() !== js.com.cs.v1.Controls.Form.Enums.FORM_CONTROL_TYPE.radioButton) {
            this._field.element.get_myDomElement().add_onKeyUp(Delegate.create(this, this._onChange));
            this._onChange();
            this._field.element.get_myDomElement().add_onBlur(Delegate.create(this, this._onBlur));
            this._onBlur();
        }
    },
    
    _init: function js_com_cs_v1_UI_Forms_FieldInputConstraint$_init() {
        this._initRegExp();
        this._initHandlers();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.UI.Forms.FieldValidator

js.com.cs.v1.UI.Forms.FieldValidator = function js_com_cs_v1_UI_Forms_FieldValidator(field, validationParams) {
    /// <param name="field" type="js.com.cs.v1.UI.Forms.Field">
    /// </param>
    /// <param name="validationParams" type="js.com.cs.v1.Forms.Validation.VALIDATION_PARAMETERS">
    /// </param>
    /// <field name="_field" type="js.com.cs.v1.UI.Forms.Field">
    /// </field>
    /// <field name="_validationParams" type="js.com.cs.v1.Forms.Validation.VALIDATION_PARAMETERS">
    /// </field>
    this._field = field;
    this._validationParams = validationParams;
}
js.com.cs.v1.UI.Forms.FieldValidator.prototype = {
    _field: null,
    _validationParams: null,
    
    validate: function js_com_cs_v1_UI_Forms_FieldValidator$validate() {
        /// <returns type="String"></returns>
        var title = this._field.title;
        if (this._validationParams.isRequired && this._field.isEmpty()) {
            return title + ' is required';
        }
        if (!this._field.isEmpty()) {
            if (this._field.element.get_controlType() !== js.com.cs.v1.Controls.Form.Enums.FORM_CONTROL_TYPE.checkBox && this._field.element.get_controlType() !== js.com.cs.v1.Controls.Form.Enums.FORM_CONTROL_TYPE.radioButton) {
                var value = this._field.get_valueObject();
                var objErr = new js.com.cs.v1.Forms.Validation.OUTPUT_ERROR_MSG();
                if (this._validationParams.isEmail) {
                    if (!js.com.cs.v1.Forms.Validation.Validation.isEmail(value)) {
                        return title + ' must be a valid email address';
                    }
                }
                else {
                    if (this._validationParams.isNumber) {
                        if (!js.com.cs.v1.Forms.Validation.Validation.isNumber(value, this._validationParams, objErr, title)) {
                            return objErr.errorMessage;
                        }
                    }
                    else {
                        if (this._validationParams.isAlphaNumeric) {
                            if (!js.com.cs.v1.Forms.Validation.Validation.isAlphaNumeric(value)) {
                                return title + ' must contain only alpha numerical characters i.e. letters, digits and underscore (_)';
                            }
                        }
                        else {
                            if (this._validationParams.isDate) {
                                if (!js.com.cs.v1.Forms.Validation.Validation.isDate(value, this._validationParams, objErr, title)) {
                                    return objErr.errorMessage;
                                }
                            }
                            else {
                                if (this._validationParams.isIPAddress) {
                                    if (!js.com.cs.v1.Forms.Validation.Validation.isIPAddress(value)) {
                                        return title + ' must be a valid IP address, e.g. 192.168.210.123';
                                    }
                                }
                                else {
                                    if (this._validationParams.isCreditCardNumber) {
                                        if (!js.com.cs.v1.Forms.Validation.Validation.isCreditCardNumber(value)) {
                                            return title + ' must be a valid credit card number';
                                        }
                                    }
                                    else if (this._validationParams.isWebsite) {
                                        if (!js.com.cs.v1.Forms.Validation.Validation.isWebsite(value)) {
                                            return title + ' must be a valid website URL';
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                if (this._validationParams.minLength > 0 || this._validationParams.maxLength > 0 || this._validationParams.maxWords > 0) {
                    if (this._validationParams.minLength > 0 && value.length < this._validationParams.minLength) {
                        return title + ' cannot contain less than ' + this._validationParams.minLength + ' character' + ((this._validationParams.minLength > 1) ? 's' : '');
                    }
                    if (this._validationParams.maxLength > 0 && value.length > this._validationParams.maxLength) {
                        return title + ' cannot contain more than ' + this._validationParams.maxLength + ' character' + ((this._validationParams.maxLength > 1) ? 's' : '');
                    }
                    if (this._validationParams.maxWords > 0 && this._field.getWords().get_length() > this._validationParams.maxWords) {
                        return title + ' cannot contain more than ' + this._validationParams.maxWords + ' word' + ((this._validationParams.maxWords > 1) ? 's' : '');
                    }
                }
                if (!isNullOrUndefined(this._validationParams.fileExtensionsAllowed)) {
                    var extensions = this._validationParams.fileExtensionsAllowed;
                    for (var i = 0; i < extensions.length; i++) {
                        extensions[i] = extensions[i].replace(new RegExp('[; |:-]', 'g'), ',');
                        extensions[i] = extensions[i].replace(new RegExp('\\.', 'g'), '');
                    }
                    var aExtensions = extensions;
                    var found = false;
                    var allowedExtensions = '';
                    var many = false;
                    for (var i = 0; i < aExtensions.length; i++) {
                        var extension = dojoClass.trim(aExtensions[i]);
                        extension = extension.toLowerCase();
                        if (!isNullOrUndefined(extension)) {
                            if (!extension.startsWith('.')) {
                                extension = '.' + extension;
                            }
                            var indexOf = value.toLowerCase().indexOf(extension);
                            if (indexOf !== -1 && indexOf === (value.length - extension.length)) {
                                found = true;
                                break;
                            }
                            if (i > 0) {
                                if (i < aExtensions.length - 1) {
                                    allowedExtensions += ', ';
                                }
                                else {
                                    allowedExtensions += ' or ';
                                }
                                many = true;
                            }
                            allowedExtensions += extension;
                        }
                    }
                    if (!found) {
                        if (many) {
                            return title + ' must be a file with one of the following extensions: ' + allowedExtensions;
                        }
                        else {
                            return title + ' must be a file with a ' + allowedExtensions + ' file extension';
                        }
                    }
                }
                if (this._validationParams.valueIn != null && this._validationParams.valueIn.get_length() > 0) {
                    var found = js.com.cs.v1.Forms.Validation.Validation.isValueIn(value, this._validationParams.valueIn, this._validationParams.valueCaseSensitive);
                    if (!found) {
                        var valuesAllowed = this._validationParams.valueIn.join(', ');
                        var msg = title + ' must be ';
                        if (this._validationParams.valueIn.get_length() > 1) {
                            msg += 'one of: ' + valuesAllowed;
                        }
                        else {
                            msg += valuesAllowed;
                        }
                        if (this._validationParams.valueCaseSensitive) {
                            msg += ' (case-sensitive)';
                        }
                        return msg;
                    }
                }
                if (!isNullOrUndefined(this._validationParams.regExpPattern)) {
                    var regExp = this._validationParams.regExpPattern;
                    if (!this._validationParams.regExpPattern.test(value)) {
                        return title + ' - Invalid value';
                    }
                }
            }
        }
        return null;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.UI.Forms.Form

js.com.cs.v1.UI.Forms.Form = function js_com_cs_v1_UI_Forms_Form(validationGroup) {
    /// <param name="validationGroup" type="String">
    /// </param>
    /// <field name="validationGroup" type="String">
    /// </field>
    /// <field name="fields" type="Array" elementType="Field">
    /// Array of Field
    /// </field>
    /// <field name="buttons" type="Array" elementType="Button">
    /// Array of Button
    /// </field>
    /// <field name="groups" type="Array" elementType="FieldGroup">
    /// Array of FieldGroup
    /// </field>
    /// <field name="onPreValidation" type="js.com.cs.v1.UI.Forms.FormValidationHandler">
    /// </field>
    /// <field name="onPostValidation" type="js.com.cs.v1.UI.Forms.FormValidationHandler">
    /// </field>
    /// <field name="onSubmit" type="DOMEventHandler">
    /// </field>
    /// <field name="__onSubmitEvent" type="EventHandler">
    /// </field>
    /// <field name="_formFocused" type="Boolean">
    /// </field>
    /// <field name="_submitOnCtrlS" type="Boolean">
    /// </field>
    /// <field name="formElement" type="js.com.cs.v1.Controls.Common.MyFormElement">
    /// </field>
    this.fields = [];
    this.buttons = [];
    this.groups = [];
    this.validationGroup = validationGroup;
    this.init();
}
js.com.cs.v1.UI.Forms.Form.prototype = {
    validationGroup: null,
    fields: null,
    buttons: null,
    groups: null,
    onPreValidation: null,
    onPostValidation: null,
    onSubmit: null,
    
    add_onSubmitEvent: function js_com_cs_v1_UI_Forms_Form$add_onSubmitEvent(value) {
        /// <param name="value" type="Function" />
        this.__onSubmitEvent = Delegate.combine(this.__onSubmitEvent, value);
    },
    remove_onSubmitEvent: function js_com_cs_v1_UI_Forms_Form$remove_onSubmitEvent(value) {
        /// <param name="value" type="Function" />
        this.__onSubmitEvent = Delegate.remove(this.__onSubmitEvent, value);
    },
    
    __onSubmitEvent: null,
    _formFocused: false,
    _submitOnCtrlS: false,
    
    get_submitOnCtrlS: function js_com_cs_v1_UI_Forms_Form$get_submitOnCtrlS() {
        /// <summary>
        /// Whether the form submits when user presses Ctrl + S and is focused
        /// </summary>
        /// <value type="Boolean"></value>
        return this._submitOnCtrlS;
    },
    set_submitOnCtrlS: function js_com_cs_v1_UI_Forms_Form$set_submitOnCtrlS(value) {
        /// <summary>
        /// Whether the form submits when user presses Ctrl + S and is focused
        /// </summary>
        /// <value type="Boolean"></value>
        this._submitOnCtrlS = value;
        this._initKeyHandler();
        return value;
    },
    
    formElement: null,
    
    _DefaultValidationHandler: function js_com_cs_v1_UI_Forms_Form$_DefaultValidationHandler() {
        /// <returns type="Boolean"></returns>
        return true;
    },
    
    init: function js_com_cs_v1_UI_Forms_Form$init() {
        try {
            this.set_submitOnCtrlS(!isNullOrUndefined(shortcut));
        }
        catch (e) {
        }
        this._initKeyHandler();
    },
    
    _initKeyHandler: function js_com_cs_v1_UI_Forms_Form$_initKeyHandler() {
        if (this._submitOnCtrlS) {
            js.com.cs.v1.Util.KeyboardUtil.removeShortcutHandler('Ctrl+S');
            js.com.cs.v1.Util.KeyboardUtil.addShortcutHandler('Ctrl+S', Delegate.create(this, this._shortcutCtrlSPressed));
        }
    },
    
    _shortcutCtrlSPressed: function js_com_cs_v1_UI_Forms_Form$_shortcutCtrlSPressed() {
        if (this._formFocused) {
            this.submit(true, true);
        }
    },
    
    submit: function js_com_cs_v1_UI_Forms_Form$submit(clickDefaultButton, doNotTriggerSubmitEvent) {
        /// <param name="clickDefaultButton" type="Boolean">
        /// </param>
        /// <param name="doNotTriggerSubmitEvent" type="Boolean">
        /// </param>
        /// <returns type="Boolean"></returns>
        if ((isNullOrUndefined(this.onPreValidation) && (isNullOrUndefined(js.com.cs.v1.UI.Forms.FormsCollection.get_instance().onPreValidation) || js.com.cs.v1.UI.Forms.FormsCollection.get_instance().onPreValidation.invoke(this))) || (!isNullOrUndefined(this.onPreValidation) && this.onPreValidation.invoke(this))) {
            if (this.validate().length === 0) {
                if ((isNullOrUndefined(this.onPostValidation) && (isNullOrUndefined(js.com.cs.v1.UI.Forms.FormsCollection.get_instance().onPostValidation) || js.com.cs.v1.UI.Forms.FormsCollection.get_instance().onPostValidation.invoke(this))) || (!isNullOrUndefined(this.onPostValidation) && this.onPostValidation.invoke(this))) {
                    if (!doNotTriggerSubmitEvent) {
                        if (this.onSubmit != null) {
                            this.onSubmit.invoke();
                        }
                        if (this.__onSubmitEvent != null) {
                            this.__onSubmitEvent.invoke(this, null);
                        }
                        if (js.com.cs.v1.UI.Forms.FormsCollection.get_instance().onSubmit != null) {
                            js.com.cs.v1.UI.Forms.FormsCollection.get_instance().onSubmit.invoke(this);
                        }
                    }
                    js.com.cs.v1.Forms.FileUploader.UploadProgress.get_instance().start();
                    var defBtn = this.getDefaultButton();
                    if (clickDefaultButton) {
                        defBtn.myButton.performClick();
                    }
                    return true;
                }
            }
        }
        return false;
    },
    
    validate: function js_com_cs_v1_UI_Forms_Form$validate() {
        /// <returns type="Array" elementType="FormError"></returns>
        var errors = new js.com.cs.v1.General.Arrays.MyArray();
        var alertMsg = '';
        var firstErrorField = null;
        for (var i = 0; i < this.fields.length; i++) {
            var f = this.fields[i];
            f.set_hasError(false);
            var errMsg = f.validate(true);
            if (!String.isNullOrEmpty(errMsg)) {
                var e = new js.com.cs.v1.UI.Forms.FormError(f, errMsg);
                errors.push(e);
                if (!String.isNullOrEmpty(alertMsg)) {
                    alertMsg += '\r\n';
                }
                alertMsg += e.errorMsg;
                if (firstErrorField == null) {
                    firstErrorField = f;
                }
            }
        }
        for (var i = 0; i < this.groups.length; i++) {
            var g = this.groups[i];
            var err = g.validate(true, (firstErrorField == null), false);
            if (err != null) {
                errors.push(err);
                if (!String.isNullOrEmpty(alertMsg)) {
                    alertMsg += '\r\n';
                }
                alertMsg += err.errorMsg;
            }
        }
        if (!String.isNullOrEmpty(alertMsg)) {
            alert(alertMsg);
        }
        if (firstErrorField != null) {
            firstErrorField.element.focus();
        }
        return errors.getBaseArray();
    },
    
    addField: function js_com_cs_v1_UI_Forms_Form$addField(field) {
        /// <param name="field" type="js.com.cs.v1.UI.Forms.Field">
        /// </param>
        if (this.formElement == null) {
            this.formElement = new js.com.cs.v1.Controls.Common.MyFormElement(field.element.get_myDomElement().get_form());
        }
        field.form = this;
        this.fields[this.fields.length] = field;
        field.element.get_myDomElement().add_onFocus(Delegate.create(this, this._field_onFocus));
        field.element.get_myDomElement().add_onBlur(Delegate.create(this, this._field_onBlur));
    },
    
    _field_onBlur: function js_com_cs_v1_UI_Forms_Form$_field_onBlur() {
        this._formFocused = false;
    },
    
    _field_onFocus: function js_com_cs_v1_UI_Forms_Form$_field_onFocus() {
        this._formFocused = true;
    },
    
    addGroup: function js_com_cs_v1_UI_Forms_Form$addGroup(group) {
        /// <param name="group" type="js.com.cs.v1.UI.Forms.FieldGroup">
        /// </param>
        group.form = this;
        this.groups[this.groups.length] = group;
    },
    
    addButton: function js_com_cs_v1_UI_Forms_Form$addButton(button) {
        /// <param name="button" type="js.com.cs.v1.UI.Forms.Button">
        /// </param>
        if (this.formElement == null) {
            this.formElement = new js.com.cs.v1.Controls.Common.MyFormElement(button.myButton.get_myDomElement().get_form());
        }
        button.form = this;
        this.buttons[this.buttons.length] = button;
    },
    
    getDefaultButton: function js_com_cs_v1_UI_Forms_Form$getDefaultButton() {
        /// <returns type="js.com.cs.v1.UI.Forms.Button"></returns>
        var b = null;
        if (this.buttons.length > 0) {
            b = this.buttons[0];
            for (var i = 0; i < this.buttons.length; i++) {
                var btn = this.buttons[i];
                if (btn.get_defaultButton()) {
                    b = btn;
                    break;
                }
            }
        }
        return b;
    },
    
    toString: function js_com_cs_v1_UI_Forms_Form$toString() {
        /// <returns type="String"></returns>
        return '[com.cs.ui.form.Form - ' + this.validationGroup + ']';
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.UI.Forms.FormError

js.com.cs.v1.UI.Forms.FormError = function js_com_cs_v1_UI_Forms_FormError(field, errorMsg) {
    /// <param name="field" type="js.com.cs.v1.UI.Forms.Field">
    /// </param>
    /// <param name="errorMsg" type="String">
    /// </param>
    /// <field name="item" type="Object">
    /// </field>
    /// <field name="errorMsg" type="String">
    /// </field>
    this.item = field;
    this.errorMsg = errorMsg;
}
js.com.cs.v1.UI.Forms.FormError.prototype = {
    item: null,
    errorMsg: null,
    
    init: function js_com_cs_v1_UI_Forms_FormError$init() {
    },
    
    toString: function js_com_cs_v1_UI_Forms_FormError$toString() {
        /// <returns type="String"></returns>
        return '[com.cs.ui.form.FieldError] - ' + this.errorMsg;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.UI.Forms.FormsCollection

js.com.cs.v1.UI.Forms.FormsCollection = function js_com_cs_v1_UI_Forms_FormsCollection() {
    /// <summary>
    /// aspNetFormSubmit is a property used to make redundant ASP.Net Form submit (mainly for AJAX)
    /// </summary>
    /// <field name="_Instance" type="js.com.cs.v1.UI.Forms.FormsCollection" static="true">
    /// </field>
    /// <field name="CLICKED_BUTTON" type="Boolean" static="true">
    /// </field>
    /// <field name="FORM_SUBMIT" type="Boolean" static="true">
    /// </field>
    /// <field name="HasFileUpload" type="Boolean" static="true">
    /// </field>
    /// <field name="_forms" type="Object">
    /// </field>
    /// <field name="_items" type="Object">
    /// </field>
    /// <field name="_keyHandlerConnected" type="Boolean">
    /// </field>
    /// <field name="keyEnterEnabled" type="Boolean">
    /// </field>
    /// <field name="showNoDefaultButtonFoundMessage" type="Boolean">
    /// </field>
    /// <field name="_fieldFocus" type="js.com.cs.v1.UI.Forms.Field">
    /// </field>
    /// <field name="currentForm" type="js.com.cs.v1.UI.Forms.Form">
    /// </field>
    /// <field name="onPreValidation" type="js.com.cs.v1.UI.Forms.FormValidationHandler">
    /// </field>
    /// <field name="onPostValidation" type="js.com.cs.v1.UI.Forms.FormValidationHandler">
    /// </field>
    /// <field name="onSubmit" type="js.com.cs.v1.UI.Forms.FormValidationHandler">
    /// </field>
    /// <field name="_keyBefore" type="Boolean">
    /// </field>
    this.onPostValidation = Delegate.create(this, this._DefaultValidationHandler);
    this.onPreValidation = Delegate.create(this, this._DefaultValidationHandler);
    this._forms = {};
    this._items = {};
}
js.com.cs.v1.UI.Forms.FormsCollection.get_instance = function js_com_cs_v1_UI_Forms_FormsCollection$get_instance() {
    /// <value type="js.com.cs.v1.UI.Forms.FormsCollection"></value>
    if (js.com.cs.v1.UI.Forms.FormsCollection._Instance == null) {
        js.com.cs.v1.UI.Forms.FormsCollection._Instance = new js.com.cs.v1.UI.Forms.FormsCollection();
    }
    return js.com.cs.v1.UI.Forms.FormsCollection._Instance;
}
js.com.cs.v1.UI.Forms.FormsCollection.submitCurrentForm = function js_com_cs_v1_UI_Forms_FormsCollection$submitCurrentForm() {
    js.com.cs.v1.UI.Forms.FormsCollection.get_instance().currentForm.submit(false, false);
}
js.com.cs.v1.UI.Forms.FormsCollection.ASPNetWebFormOnSubmit = function js_com_cs_v1_UI_Forms_FormsCollection$ASPNetWebFormOnSubmit() {
    /// <returns type="Boolean"></returns>
    if (!js.com.cs.v1.UI.Forms.FormsCollection.CLICKED_BUTTON) {
        js.com.cs.v1.UI.Forms.FormsCollection.get_instance().clickCurrentFormDefaultButton();
        return false;
    }
    var errs = js.com.cs.v1.UI.Forms.FormsCollection.get_instance().validateCurrentForm();
    var result = (errs.length === 0);
    js.com.cs.v1.UI.Forms.FormsCollection.CLICKED_BUTTON = false;
    if (result) {
        js.com.cs.v1.UI.Forms.FormsCollection.submitCurrentForm();
    }
    return result;
}
js.com.cs.v1.UI.Forms.FormsCollection.prototype = {
    _forms: null,
    _items: null,
    _keyHandlerConnected: false,
    keyEnterEnabled: true,
    showNoDefaultButtonFoundMessage: true,
    _fieldFocus: null,
    currentForm: null,
    onPreValidation: null,
    onPostValidation: null,
    onSubmit: null,
    
    _DefaultValidationHandler: function js_com_cs_v1_UI_Forms_FormsCollection$_DefaultValidationHandler(form) {
        /// <param name="form" type="js.com.cs.v1.UI.Forms.Form">
        /// </param>
        /// <returns type="Boolean"></returns>
        return true;
    },
    
    _enterPressed: function js_com_cs_v1_UI_Forms_FormsCollection$_enterPressed() {
        if (this.keyEnterEnabled) {
            this.clickCurrentFormDefaultButton();
        }
    },
    
    _keyUp: function js_com_cs_v1_UI_Forms_FormsCollection$_keyUp() {
        if (window.event.keyCode === ScriptFX.UI.Key.enter) {
            if (this.get_fieldWithFocus() != null && this.get_fieldWithFocus().element.get_myDomElement().domElement.tagName.toLowerCase() !== 'textarea') {
                this._enterPressed();
            }
        }
    },
    
    _initKeyHandler: function js_com_cs_v1_UI_Forms_FormsCollection$_initKeyHandler(init) {
        /// <param name="init" type="Boolean">
        /// </param>
        if (init) {
            if (!this._keyHandlerConnected) {
                js.com.cs.v1.General.GeneralClass.getBody().add_onKeyUp(Delegate.create(this, this._keyUp));
                this._keyHandlerConnected = true;
            }
        }
        else {
            if (this._keyHandlerConnected) {
                js.com.cs.v1.General.GeneralClass.getBody().remove_onKeyUp(Delegate.create(this, this._keyUp));
                this._keyHandlerConnected = false;
            }
        }
    },
    
    _getForm: function js_com_cs_v1_UI_Forms_FormsCollection$_getForm(groupID) {
        /// <param name="groupID" type="String">
        /// </param>
        /// <returns type="js.com.cs.v1.UI.Forms.Form"></returns>
        if (isNullOrUndefined(groupID)) {
            groupID = '__MAIN';
        }
        var f = this._forms[groupID];
        if (isNullOrUndefined(f)) {
            f = new js.com.cs.v1.UI.Forms.Form(groupID);
            this._forms[groupID] = f;
        }
        return f;
    },
    
    addField: function js_com_cs_v1_UI_Forms_FormsCollection$addField(field) {
        /// <param name="field" type="js.com.cs.v1.UI.Forms.Field">
        /// </param>
        var validationGroup = field.validationGroup;
        var form = this._getForm(validationGroup);
        var fieldID = field.get_id();
        this._items[fieldID] = field;
        form.addField(field);
    },
    
    addGroup: function js_com_cs_v1_UI_Forms_FormsCollection$addGroup(group) {
        /// <param name="group" type="js.com.cs.v1.UI.Forms.FieldGroup">
        /// </param>
        var ID = group.id;
        var validationGroup = group.validationGroup;
        var form = this._getForm(validationGroup);
        this._items[ID] = group;
        form.addGroup(group);
    },
    
    addButton: function js_com_cs_v1_UI_Forms_FormsCollection$addButton(button) {
        /// <param name="button" type="js.com.cs.v1.UI.Forms.Button">
        /// </param>
        var ID = button.get_id();
        var validationGroup = button.validationGroup;
        var form = this._getForm(validationGroup);
        this._items[ID] = button;
        form.addButton(button);
    },
    
    get_fieldWithFocus: function js_com_cs_v1_UI_Forms_FormsCollection$get_fieldWithFocus() {
        /// <value type="js.com.cs.v1.UI.Forms.Field"></value>
        return this._fieldFocus;
    },
    set_fieldWithFocus: function js_com_cs_v1_UI_Forms_FormsCollection$set_fieldWithFocus(value) {
        /// <value type="js.com.cs.v1.UI.Forms.Field"></value>
        this._fieldFocus = value;
        this._initKeyHandler(!isNullOrUndefined(this._fieldFocus));
        if (this._fieldFocus == null) {
        }
        else {
            this.currentForm = this._fieldFocus.form;
        }
        return value;
    },
    
    _keyBefore: false,
    
    _clickCurrentFormDefaultButton_Callback: function js_com_cs_v1_UI_Forms_FormsCollection$_clickCurrentFormDefaultButton_Callback() {
        this.keyEnterEnabled = this._keyBefore;
        js.com.cs.v1.UI.Forms.FormsCollection.CLICKED_BUTTON = false;
    },
    
    clickCurrentFormDefaultButton: function js_com_cs_v1_UI_Forms_FormsCollection$clickCurrentFormDefaultButton() {
        js.com.cs.v1.UI.Forms.FormsCollection.CLICKED_BUTTON = true;
        var form = this.currentForm;
        if (form != null) {
            this._keyBefore = this.keyEnterEnabled;
            this.keyEnterEnabled = false;
            var defaultButton = form.getDefaultButton();
            if (defaultButton != null) {
                defaultButton.myButton.performClick();
            }
            else {
                if (this.showNoDefaultButtonFoundMessage) {
                    alert('No default button specified for group: ' + this.currentForm.validationGroup + '.\n\nPlease specify one or else remove Validation Group');
                }
            }
        }
        js.com.cs.v1.UI.Forms.FormsCollection.CLICKED_BUTTON = false;
    },
    
    validateCurrentForm: function js_com_cs_v1_UI_Forms_FormsCollection$validateCurrentForm() {
        /// <returns type="Array" elementType="FormError"></returns>
        var form = this.currentForm;
        js.com.cs.v1.Forms.FileUploader.UploadProgress.get_instance().updateFormAction(form);
        if (form != null) {
            var errors = form.validate();
            if (errors == null || errors.length === 0) {
                if (js.com.cs.v1.Forms.FileUploader.UploadProgress.get_instance() != null) {
                    if (js.com.cs.v1.UI.Forms.FormsCollection.HasFileUpload) {
                        js.com.cs.v1.Forms.FileUploader.UploadProgress.get_instance().start();
                    }
                }
            }
            return errors;
        }
        else {
            return [];
        }
    },
    
    _init: function js_com_cs_v1_UI_Forms_FormsCollection$_init() {
    },
    
    getGroupByID: function js_com_cs_v1_UI_Forms_FormsCollection$getGroupByID(id) {
        /// <param name="id" type="String">
        /// </param>
        /// <returns type="js.com.cs.v1.UI.Forms.FieldGroup"></returns>
        return this._items[id];
    },
    
    getFieldByID: function js_com_cs_v1_UI_Forms_FormsCollection$getFieldByID(id) {
        /// <param name="id" type="String">
        /// </param>
        /// <returns type="js.com.cs.v1.UI.Forms.Field"></returns>
        return this._items[id];
    },
    
    getButtonByID: function js_com_cs_v1_UI_Forms_FormsCollection$getButtonByID(id) {
        /// <param name="id" type="String">
        /// </param>
        /// <returns type="js.com.cs.v1.UI.Forms.Button"></returns>
        return this._items[id];
    },
    
    getFormByID: function js_com_cs_v1_UI_Forms_FormsCollection$getFormByID(id) {
        /// <param name="id" type="String">
        /// </param>
        /// <returns type="js.com.cs.v1.UI.Forms.Form"></returns>
        return this._forms[id];
    },
    
    clearForm: function js_com_cs_v1_UI_Forms_FormsCollection$clearForm(formValidationGroupID) {
        /// <param name="formValidationGroupID" type="String">
        /// </param>
        this._forms[formValidationGroupID] = null;
    },
    
    toString: function js_com_cs_v1_UI_Forms_FormsCollection$toString() {
        /// <returns type="String"></returns>
        return 'FormsCollection';
    }
}


Type.createNamespace('js.com.cs.v1.UI');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.UI.Image

js.com.cs.v1.UI.Image = function js_com_cs_v1_UI_Image(element) {
    /// <param name="element" type="js.com.cs.v1.Controls.Common.MyImageElement">
    /// </param>
    /// <field name="ImageNormal" type="String">
    /// </field>
    /// <field name="ImageRollover" type="String">
    /// </field>
    /// <field name="_onClick_ClickButton" type="js.com.cs.v1.Controls.Form.MyButton">
    /// </field>
    /// <field name="_preloadImg" type="js.com.cs.v1.Controls.Common.MyImageElement">
    /// </field>
    /// <field name="_image" type="js.com.cs.v1.Controls.Common.MyImageElement">
    /// </field>
    if (Type.canCast(element, js.com.cs.v1.Controls.Common.MyImageElement)) {
        this._image = element;
    }
    else {
        this._image = new js.com.cs.v1.Controls.Common.MyImageElement(element);
    }
    this.ImageNormal = this._image.get_src();
    dojoClass.addOnLoad(Delegate.create(this, this._onLoad));
}
js.com.cs.v1.UI.Image.prototype = {
    ImageNormal: null,
    ImageRollover: null,
    _onClick_ClickButton: null,
    _preloadImg: null,
    _image: null,
    
    SetOnClick_ClickButton: function js_com_cs_v1_UI_Image$SetOnClick_ClickButton(id) {
        /// <param name="id" type="js.com.cs.v1.Controls.Form.MyButton">
        /// </param>
        var btn = new js.com.cs.v1.Controls.Form.MyButton();
        if (Type.canCast(id, String)) {
            var elem = dojoClass.byId(id);
            if (elem != null) {
                this._onClick_ClickButton = new js.com.cs.v1.Controls.Form.MyButton(elem);
            }
        }
        else {
            this._onClick_ClickButton = id;
        }
    },
    
    _imageClick: function js_com_cs_v1_UI_Image$_imageClick() {
        if (this._onClick_ClickButton != null) {
            this._onClick_ClickButton.focus();
            this._onClick_ClickButton.performClick();
        }
    },
    
    _imageMouseOver: function js_com_cs_v1_UI_Image$_imageMouseOver() {
        if (!String.isNullOrEmpty(this.ImageRollover)) {
            this._image.set_src(this.ImageRollover);
        }
    },
    
    _imageMouseOut: function js_com_cs_v1_UI_Image$_imageMouseOut() {
        if (!String.isNullOrEmpty(this.ImageNormal)) {
            this._image.set_src(this.ImageNormal);
        }
    },
    
    _imageRolloverPreloaded: function js_com_cs_v1_UI_Image$_imageRolloverPreloaded() {
        this._preloadImg = null;
    },
    
    _startPreloadingImage: function js_com_cs_v1_UI_Image$_startPreloadingImage() {
        if (this._preloadImg == null) {
            this._preloadImg = new js.com.cs.v1.Controls.Common.MyImageElement();
            this._preloadImg.add_onLoad(Delegate.create(this, this._imageRolloverPreloaded));
        }
        this._preloadImg.set_src(this.ImageRollover);
    },
    
    _onLoad: function js_com_cs_v1_UI_Image$_onLoad() {
        if (!isNullOrUndefined(this.ImageRollover)) {
            this._startPreloadingImage();
        }
        if (this._image != null) {
            this._image.add_onClick(Delegate.create(this, this._imageClick));
            this._image.add_onMouseOver(Delegate.create(this, this._imageMouseOver));
            this._image.add_onMouseOut(Delegate.create(this, this._imageMouseOut));
        }
    },
    
    changeImage: function js_com_cs_v1_UI_Image$changeImage(imgNormal, imgRollover) {
        /// <param name="imgNormal" type="String">
        /// </param>
        /// <param name="imgRollover" type="String">
        /// </param>
        this.ImageNormal = imgNormal;
        this.ImageRollover = imgRollover;
        this._startPreloadingImage();
        this._image.set_src(this.ImageNormal);
    }
}


Type.createNamespace('js.com.cs.v1.UI.Text');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.UI.Text.TextOneLineWidthCalculator

js.com.cs.v1.UI.Text.TextOneLineWidthCalculator = function js_com_cs_v1_UI_Text_TextOneLineWidthCalculator(element) {
    /// <param name="element" type="Object" domElement="true">
    /// </param>
    /// <field name="_origWidthStyle" type="String">
    /// </field>
    /// <field name="_origHeightStyle" type="String">
    /// </field>
    /// <field name="_minHeight" type="Number" integer="true">
    /// </field>
    /// <field name="_itemContentWidth" type="Number" integer="true">
    /// </field>
    this._origWidthStyle = element.style.width;
    this._origHeightStyle = element.style.height;
    element.style.height = 'auto';
    this._itemContentWidth = js.com.cs.v1.Util.GeneralUtil.marginBoxW(element);
    var currHeight = js.com.cs.v1.Util.GeneralUtil.marginBoxH(element);
    element.style.width = '999999px';
    this._minHeight = js.com.cs.v1.Util.GeneralUtil.marginBoxH(element);
    if (this._minHeight < currHeight) {
        this._calculateMinimumHeight();
    }
}
js.com.cs.v1.UI.Text.TextOneLineWidthCalculator.prototype = {
    _origWidthStyle: null,
    _origHeightStyle: null,
    _minHeight: 0,
    _itemContentWidth: 0,
    
    _calculateMinimumHeight: function js_com_cs_v1_UI_Text_TextOneLineWidthCalculator$_calculateMinimumHeight() {
        var incWidth = 5000;
    },
    
    _init: function js_com_cs_v1_UI_Text_TextOneLineWidthCalculator$_init() {
    }
}


Type.createNamespace('js.com.cs.v1.UI.Ticker');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.UI.Ticker.ROTATE_DIRECTION

js.com.cs.v1.UI.Ticker.ROTATE_DIRECTION = function() { 
    /// <field name="left" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="right" type="Number" integer="true" static="true">
    /// </field>
};
js.com.cs.v1.UI.Ticker.ROTATE_DIRECTION.prototype = {
    left: 0, 
    right: 1
}
js.com.cs.v1.UI.Ticker.ROTATE_DIRECTION.createEnum('js.com.cs.v1.UI.Ticker.ROTATE_DIRECTION', false);


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.UI.Ticker.FadingTicker

js.com.cs.v1.UI.Ticker.FadingTicker = function js_com_cs_v1_UI_Ticker_FadingTicker(divHolderID, htmlTexts, fadeDurationMs, delayMs, random) {
    /// <param name="divHolderID" type="String">
    /// </param>
    /// <param name="htmlTexts" type="Array" elementType="String">
    /// </param>
    /// <param name="fadeDurationMs" type="Number" integer="true">
    /// </param>
    /// <param name="delayMs" type="Number" integer="true">
    /// </param>
    /// <param name="random" type="Boolean">
    /// </param>
    /// <field name="_fadeDurationMs" type="Number" integer="true">
    /// </field>
    /// <field name="_delayMs" type="Number" integer="true">
    /// </field>
    /// <field name="_divHolder" type="js.com.cs.v1.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_htmlTexts" type="Array" elementType="String">
    /// </field>
    /// <field name="_index" type="Number" integer="true">
    /// </field>
    /// <field name="_random" type="Boolean">
    /// </field>
    /// <field name="_initial" type="Boolean">
    /// </field>
    /// <field name="_currAnimation" type="js.org.Dojo.DojoObjects._Animation">
    /// </field>
    /// <field name="_currTimeoutHandler" type="Number" integer="true">
    /// </field>
    this._divHolder = new js.com.cs.v1.Controls.Common.MyDivElement(divHolderID);
    this._delayMs = delayMs;
    this._fadeDurationMs = fadeDurationMs;
    this._htmlTexts = htmlTexts;
    this._random = random;
    this._index = -1;
    this._init();
}
js.com.cs.v1.UI.Ticker.FadingTicker.prototype = {
    _fadeDurationMs: 1000,
    
    get_fadeDurationMs: function js_com_cs_v1_UI_Ticker_FadingTicker$get_fadeDurationMs() {
        /// <value type="Number" integer="true"></value>
        return this._fadeDurationMs;
    },
    set_fadeDurationMs: function js_com_cs_v1_UI_Ticker_FadingTicker$set_fadeDurationMs(value) {
        /// <value type="Number" integer="true"></value>
        this._fadeDurationMs = value;
        return value;
    },
    
    _delayMs: 5000,
    
    get_delayMs: function js_com_cs_v1_UI_Ticker_FadingTicker$get_delayMs() {
        /// <value type="Number" integer="true"></value>
        return this._delayMs;
    },
    set_delayMs: function js_com_cs_v1_UI_Ticker_FadingTicker$set_delayMs(value) {
        /// <value type="Number" integer="true"></value>
        this._delayMs = value;
        return value;
    },
    
    _divHolder: null,
    _htmlTexts: null,
    _index: 0,
    _random: false,
    _initial: true,
    _currAnimation: null,
    _currTimeoutHandler: 0,
    
    _reset: function js_com_cs_v1_UI_Ticker_FadingTicker$_reset() {
        if (this._random) {
            this._htmlTexts = js.com.cs.v1.Util.ArrayUtil.randomizeArray(this._htmlTexts);
        }
        this._index = -1;
    },
    
    _init: function js_com_cs_v1_UI_Ticker_FadingTicker$_init() {
        this._reset();
        this._next();
    },
    
    _showNextText: function js_com_cs_v1_UI_Ticker_FadingTicker$_showNextText() {
        if (this._index === this._htmlTexts.length - 1) {
            this._reset();
        }
        this._index++;
        var text = this._htmlTexts[this._index];
        this._divHolder.set_innerHTML(text);
        this._currAnimation = this._divHolder.fadeIn(this.get_fadeDurationMs());
        this._currAnimation.onEnd = Delegate.create(this, this._onTextShown);
    },
    
    _next: function js_com_cs_v1_UI_Ticker_FadingTicker$_next() {
        if (this._initial) {
            this._onTextHidden();
            this._initial = false;
        }
        else {
            if (this._currAnimation != null) {
                this._currAnimation.stop(true);
            }
            this._currAnimation = this._divHolder.fadeOut(this.get_fadeDurationMs());
            this._currAnimation.onEnd = Delegate.create(this, this._onTextHidden);
        }
    },
    
    _onTextShown: function js_com_cs_v1_UI_Ticker_FadingTicker$_onTextShown() {
        this._currTimeoutHandler = window.setTimeout(Delegate.create(this, this._next), this.get_delayMs());
    },
    
    _onTextHidden: function js_com_cs_v1_UI_Ticker_FadingTicker$_onTextHidden() {
        this._showNextText();
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.UI.Ticker.RotatingTicker

js.com.cs.v1.UI.Ticker.RotatingTicker = function js_com_cs_v1_UI_Ticker_RotatingTicker(divHolderID, htmlText, stopOnMouseOver, speedPx, updateDelayMs, splitDistancePx, initialOffset, rotateDirection) {
    /// <param name="divHolderID" type="String">
    /// Holder where text will rotate
    /// </param>
    /// <param name="htmlText" type="String">
    /// Textual content rotating
    /// </param>
    /// <param name="stopOnMouseOver" type="Boolean">
    /// </param>
    /// <param name="speedPx" type="Number" integer="true">
    /// The amount of pixels to move with each increment
    /// </param>
    /// <param name="updateDelayMs" type="Number" integer="true">
    /// The amount of ms to update delay
    /// </param>
    /// <param name="splitDistancePx" type="Number" integer="true">
    /// The distance to add between the texts when it is moved entirely
    /// </param>
    /// <param name="initialOffset" type="Number" integer="true">
    /// The initial offset (px) from the 0 coordinate
    /// </param>
    /// <param name="rotateDirection" type="js.com.cs.v1.UI.Ticker.ROTATE_DIRECTION">
    /// Move left / right
    /// </param>
    /// <field name="_rotateDirection" type="js.com.cs.v1.UI.Ticker.ROTATE_DIRECTION">
    /// </field>
    /// <field name="_htmlText" type="String">
    /// </field>
    /// <field name="_divHolder" type="js.com.cs.v1.Controls.Common.MyDivElement">
    /// </field>
    /// <field name="_stopOnMouseOver" type="Boolean">
    /// </field>
    /// <field name="_content1" type="Object" domElement="true">
    /// </field>
    /// <field name="_content2" type="Object" domElement="true">
    /// </field>
    /// <field name="_contentWidth" type="Number" integer="true">
    /// </field>
    /// <field name="_containerWidth" type="Number" integer="true">
    /// </field>
    /// <field name="_speedPx" type="Number" integer="true">
    /// </field>
    /// <field name="_updateDelayMS" type="Number" integer="true">
    /// </field>
    /// <field name="_splitDistancePx" type="Number" integer="true">
    /// </field>
    /// <field name="_initialOffset" type="Number" integer="true">
    /// </field>
    /// <field name="_updateHandler" type="Number" integer="true">
    /// </field>
    /// <field name="_content1Pos" type="Number" integer="true">
    /// </field>
    /// <field name="_content2Pos" type="Number" integer="true">
    /// </field>
    this._divHolder = new js.com.cs.v1.Controls.Common.MyDivElement(divHolderID);
    this._htmlText = htmlText;
    this._rotateDirection = rotateDirection;
    this._stopOnMouseOver = stopOnMouseOver;
    this._initialOffset = initialOffset;
    this._content1 = document.createElement('nobr');
    this._content2 = document.createElement('nobr');
    this._content1.style.position = this._content2.style.position = 'absolute';
    this._divHolder.get_style().position = 'relative';
    this._content1.innerHTML = this._content2.innerHTML = htmlText;
    this._divHolder.appendChild(this._content1);
    this._splitDistancePx = splitDistancePx;
    this._speedPx = speedPx;
    this._updateDelayMS = updateDelayMs;
    this._contentWidth = js.com.cs.v1.Util.GeneralUtil.marginBoxW(this._content1);
    this._containerWidth = js.com.cs.v1.Util.GeneralUtil.marginBoxW(this._divHolder.domElement);
    if (this._containerWidth < this._contentWidth) {
        this._initTicker();
    }
    this._divHolder.add_onMouseOver(Delegate.create(this, this._divHolder_onMouseOver));
    this._divHolder.add_onMouseOut(Delegate.create(this, this._divHolder_onMouseOut));
}
js.com.cs.v1.UI.Ticker.RotatingTicker.prototype = {
    _rotateDirection: 0,
    _htmlText: null,
    _divHolder: null,
    _stopOnMouseOver: false,
    _content1: null,
    _content2: null,
    _contentWidth: 0,
    _containerWidth: 0,
    _speedPx: 0,
    _updateDelayMS: 0,
    _splitDistancePx: 0,
    _initialOffset: 0,
    _updateHandler: 0,
    _content1Pos: 0,
    _content2Pos: 0,
    
    _divHolder_onMouseOut: function js_com_cs_v1_UI_Ticker_RotatingTicker$_divHolder_onMouseOut() {
        if (this._stopOnMouseOver) {
            this.start();
        }
    },
    
    _divHolder_onMouseOver: function js_com_cs_v1_UI_Ticker_RotatingTicker$_divHolder_onMouseOver() {
        if (this._stopOnMouseOver) {
            this.stop();
        }
    },
    
    _resetPositions: function js_com_cs_v1_UI_Ticker_RotatingTicker$_resetPositions() {
        this._content1.style.left = '0px';
        this._content1Pos = 0;
        if (this._rotateDirection === js.com.cs.v1.UI.Ticker.ROTATE_DIRECTION.left) {
            this._content2Pos = this._contentWidth + this._splitDistancePx;
        }
        else {
            this._content2Pos = this._contentWidth + this._splitDistancePx;
        }
        this._updateTextPositions();
    },
    
    _updateTextPositions: function js_com_cs_v1_UI_Ticker_RotatingTicker$_updateTextPositions() {
        this._content2.style.left = this._content2Pos + 'px';
        this._content1.style.left = this._content1Pos + 'px';
    },
    
    _setInitialOffset: function js_com_cs_v1_UI_Ticker_RotatingTicker$_setInitialOffset() {
        this._content1Pos += this._initialOffset;
        this._content2Pos += this._initialOffset;
        this._updateTextPositions();
    },
    
    _initTicker: function js_com_cs_v1_UI_Ticker_RotatingTicker$_initTicker() {
        this._divHolder.appendChild(this._content2);
        this._resetPositions();
        this._setInitialOffset();
        this.start();
    },
    
    stop: function js_com_cs_v1_UI_Ticker_RotatingTicker$stop() {
        window.clearInterval(this._updateHandler);
    },
    
    start: function js_com_cs_v1_UI_Ticker_RotatingTicker$start() {
        window.clearInterval(this._updateHandler);
        this._updateHandler = window.setInterval(Delegate.create(this, this._tick), this._updateDelayMS);
    },
    
    _tick: function js_com_cs_v1_UI_Ticker_RotatingTicker$_tick() {
        if (this._rotateDirection === js.com.cs.v1.UI.Ticker.ROTATE_DIRECTION.left) {
            this._content1Pos -= this._speedPx;
            this._content2Pos -= this._speedPx;
            if (this._content2Pos <= 0) {
                this._resetPositions();
                return;
            }
        }
        else {
            this._content1Pos += this._speedPx;
            this._content2Pos += this._speedPx;
            if (this._content2Pos >= 0) {
                this._resetPositions();
                return;
            }
        }
        this._updateTextPositions();
    },
    
    _init: function js_com_cs_v1_UI_Ticker_RotatingTicker$_init() {
    }
}


Type.createNamespace('js.com.cs.v1.URL');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.URL.QueryString

js.com.cs.v1.URL.QueryString = function js_com_cs_v1_URL_QueryString(querystring) {
    /// <param name="querystring" type="String">
    /// </param>
    /// <field name="_params" type="Object">
    /// </field>
    /// <field name="_querystring" type="String">
    /// </field>
    querystring = js.com.cs.v1.Util.URLUtil.getQueryString(querystring);
    this._params = {};
    this._parseParams(querystring);
}
js.com.cs.v1.URL.QueryString.prototype = {
    _params: null,
    _querystring: null,
    
    _parseParams: function js_com_cs_v1_URL_QueryString$_parseParams(qs) {
        /// <param name="qs" type="String">
        /// </param>
        var nameValues = qs.split('&');
        for (var i = 0; i < nameValues.length; i++) {
            var data = nameValues[i].split('=');
            if (data.length >= 2) {
                var name = data[0];
                var value = data[1];
                this._params[name] = value;
            }
        }
    },
    
    toString: function js_com_cs_v1_URL_QueryString$toString() {
        /// <returns type="String"></returns>
        var s = '';
        var test = Object.getKeyCount(this._params);
        var $dict1 = this._params;
        for (var $key2 in $dict1) {
            var x = { key: $key2, value: $dict1[$key2] };
            if (s !== '') {
                s += '&';
            }
            var name = x.key;
            var value = x.value;
            s += name + '=' + value;
        }
        return s;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.URL.URLHandler

js.com.cs.v1.URL.URLHandler = function js_com_cs_v1_URL_URLHandler(url) {
    /// <param name="url" type="String">
    /// </param>
    /// <field name="_paths" type="Array" elementType="String">
    /// </field>
    /// <field name="_queryString" type="js.com.cs.v1.URL.QueryString">
    /// </field>
    this.set_url(url);
}
js.com.cs.v1.URL.URLHandler.prototype = {
    _paths: null,
    
    get_paths: function js_com_cs_v1_URL_URLHandler$get_paths() {
        /// <value type="Array" elementType="String"></value>
        return this._paths;
    },
    set_paths: function js_com_cs_v1_URL_URLHandler$set_paths(value) {
        /// <value type="Array" elementType="String"></value>
        this._paths = value;
        return value;
    },
    
    _queryString: null,
    
    get_path: function js_com_cs_v1_URL_URLHandler$get_path() {
        /// <value type="String"></value>
        return this._paths.join('/');
    },
    set_path: function js_com_cs_v1_URL_URLHandler$set_path(value) {
        /// <value type="String"></value>
        if (value.startsWith('/')) {
            value = value.remove(0, 1);
        }
        this._paths = js.com.cs.v1.Util.URLUtil.removeQueryString(value).split('/');
        return value;
    },
    
    get_queryString: function js_com_cs_v1_URL_URLHandler$get_queryString() {
        /// <value type="js.com.cs.v1.URL.QueryString"></value>
        return this._queryString;
    },
    set_queryString: function js_com_cs_v1_URL_URLHandler$set_queryString(value) {
        /// <value type="js.com.cs.v1.URL.QueryString"></value>
        this._queryString = value;
        return value;
    },
    
    get_queryStringValue: function js_com_cs_v1_URL_URLHandler$get_queryStringValue() {
        /// <value type="String"></value>
        return this._queryString.toString();
    },
    set_queryStringValue: function js_com_cs_v1_URL_URLHandler$set_queryStringValue(value) {
        /// <value type="String"></value>
        this._queryString = new js.com.cs.v1.URL.QueryString(value);
        return value;
    },
    
    get_url: function js_com_cs_v1_URL_URLHandler$get_url() {
        /// <value type="String"></value>
        if (!String.isNullOrEmpty(this.get_queryStringValue())) {
            return this.get_path() + '?' + this.get_queryStringValue();
        }
        else {
            return this.get_path();
        }
    },
    set_url: function js_com_cs_v1_URL_URLHandler$set_url(value) {
        /// <value type="String"></value>
        this.set_queryStringValue(value);
        this.set_path(value);
        return value;
    },
    
    compareTo: function js_com_cs_v1_URL_URLHandler$compareTo(url) {
        /// <param name="url" type="js.com.cs.v1.URL.URLHandler">
        /// </param>
        /// <returns type="Boolean"></returns>
        return this.toString().toLowerCase() === url.toString().toLowerCase();
    }
}


Type.createNamespace('js.com.cs.v1.Util');

////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Util.ArrayUtil

js.com.cs.v1.Util.ArrayUtil = function js_com_cs_v1_Util_ArrayUtil() {
}
js.com.cs.v1.Util.ArrayUtil._randomCompareCallback = function js_com_cs_v1_Util_ArrayUtil$_randomCompareCallback(x, y) {
    /// <param name="x" type="Object">
    /// </param>
    /// <param name="y" type="Object">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    var r = Math.random();
    return (r < 0.5) ? -1 : 1;
}
js.com.cs.v1.Util.ArrayUtil.clone = function js_com_cs_v1_Util_ArrayUtil$clone(a) {
    /// <param name="a" type="Array">
    /// </param>
    /// <returns type="Array"></returns>
    var b = [];
    for (var i = 0; i < a.length; i++) {
        b.push(a[i]);
    }
    return b;
}
js.com.cs.v1.Util.ArrayUtil.randomizeArray = function js_com_cs_v1_Util_ArrayUtil$randomizeArray(a) {
    /// <param name="a" type="Array">
    /// </param>
    /// <returns type="Array"></returns>
    if (a.length <= 1) {
        return a;
    }
    var lastElement = a[a.length - 1];
    var b = js.com.cs.v1.Util.ArrayUtil.clone(a);
    b.sort(Delegate.create(null, js.com.cs.v1.Util.ArrayUtil._randomCompareCallback));
    if (b[0] === lastElement) {
        return js.com.cs.v1.Util.ArrayUtil.randomizeArray(b);
    }
    else {
        return b;
    }
}
js.com.cs.v1.Util.ArrayUtil.addItemInArray = function js_com_cs_v1_Util_ArrayUtil$addItemInArray(oArray, item, index) {
    /// <param name="oArray" type="Object">
    /// </param>
    /// <param name="item" type="Object">
    /// </param>
    /// <param name="index" type="Number" integer="true">
    /// </param>
    if (index == null) {
        index = -1;
    }
    var array = oArray;
    if (index === -1) {
        index = array.length;
    }
    array.splice(index, 0, item);
}
js.com.cs.v1.Util.ArrayUtil.removeItemFromArray = function js_com_cs_v1_Util_ArrayUtil$removeItemFromArray(oArray, index) {
    /// <param name="oArray" type="Object">
    /// </param>
    /// <param name="index" type="Number" integer="true">
    /// </param>
    oArray.splice(index, 1);
}
js.com.cs.v1.Util.ArrayUtil.removeItemsFromArray = function js_com_cs_v1_Util_ArrayUtil$removeItemsFromArray(oArray, from, to) {
    /// <param name="oArray" type="Object">
    /// </param>
    /// <param name="from" type="Number" integer="true">
    /// </param>
    /// <param name="to" type="Number" integer="true">
    /// </param>
    for (var i = from; i <= to; i++) {
        js.com.cs.v1.Util.ArrayUtil.removeItemFromArray(oArray, from);
    }
}
js.com.cs.v1.Util.ArrayUtil.removeObjectsFromArray = function js_com_cs_v1_Util_ArrayUtil$removeObjectsFromArray(oArray, itemToRemove) {
    /// <summary>
    /// Remove all instances of an object from an array
    /// </summary>
    /// <param name="oArray" type="Object">
    /// </param>
    /// <param name="itemToRemove" type="Object">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    var amtRemoved = 0;
    var a = oArray;
    for (var i = 0; i < a.length; i++) {
        if (a[i] === itemToRemove) {
            js.com.cs.v1.Util.ArrayUtil.removeItemFromArray(a, i);
            amtRemoved++;
            i--;
        }
    }
    return amtRemoved;
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Util.Console

js.com.cs.v1.Util.Console = function js_com_cs_v1_Util_Console() {
}
js.com.cs.v1.Util.Console.log = function js_com_cs_v1_Util_Console$log(msg) {
    /// <param name="msg" type="Object">
    /// </param>
    var t = console;
    t.log(msg);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Util.EventUtil

js.com.cs.v1.Util.EventUtil = function js_com_cs_v1_Util_EventUtil() {
}
js.com.cs.v1.Util.EventUtil.preventDefault = function js_com_cs_v1_Util_EventUtil$preventDefault(e) {
    /// <param name="e" type="Event">
    /// </param>
    e.preventDefault();
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Util.FormUtil

js.com.cs.v1.Util.FormUtil = function js_com_cs_v1_Util_FormUtil() {
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Util.GeneralUtil

js.com.cs.v1.Util.GeneralUtil = function js_com_cs_v1_Util_GeneralUtil() {
}
js.com.cs.v1.Util.GeneralUtil.getChildControls = function js_com_cs_v1_Util_GeneralUtil$getChildControls(elem) {
    /// <summary>
    /// Returns all the child controls in one list
    /// </summary>
    /// <param name="elem" type="js.com.cs.v1.Controls.Common.MyDOMElement">
    /// </param>
    /// <returns type="Array" elementType="MyDOMElement"></returns>
    if (Type.canCast(elem, Object)) {
        elem = new js.com.cs.v1.Controls.Common.MyDOMElement(elem);
    }
    var list = new js.com.cs.v1.General.Arrays.MyArray();
    var curr = elem;
    list.push(curr);
    for (var i = 0; i < elem.domElement.children.length; i++) {
        var currList = js.com.cs.v1.Util.GeneralUtil.getChildControls(elem.domElement.children[i]);
        for (var j = 0; j < currList.length; j++) {
            list.push(currList[j]);
        }
    }
    return list.getBaseArray();
}
js.com.cs.v1.Util.GeneralUtil.getViewPort = function js_com_cs_v1_Util_GeneralUtil$getViewPort() {
    /// <returns type="js.org.Dojo.DojoObjects._Box"></returns>
    var w = 0;
    var h = 0;
    var de = document.documentElement;
    var dew = de.clientWidth;
    var deh = de.clientHeight;
    if (dojoClass.isMozilla > 0) {
        var minw, minh, maxw, maxh;
        var dbw = document.body.clientWidth;
        if (dbw > dew) {
            minw = dew;
            maxw = dbw;
        }
        else {
            maxw = dew;
            minw = dbw;
        }
        var dbh = document.body.clientHeight;
        if (dbh > deh) {
            minh = deh;
            maxh = dbh;
        }
        else {
            maxh = deh;
            minh = dbh;
        }
        w = (maxw > window.innerWidth) ? minw : maxw;
        h = (maxh > window.innerHeight) ? minh : maxh;
    }
    else if (dojoClass.isOpera === 0 && ((window.innerWidth)) !== 0) {
        w = window.innerWidth;
        h = window.innerHeight;
    }
    else if (dojoClass.isIE > 0 && de != null && deh !== 0) {
        w = dew;
        h = deh;
    }
    else if (dojo.body().clientWidth !== 0) {
        w = dojo.body().clientWidth;
        h = dojo.body().clientHeight;
    }
    var scroll = dojo._docScroll();
    var b = new js.org.Dojo.DojoObjects._Box();
    b.w = w;
    b.h = h;
    b.l = scroll['x'];
    b.t = scroll['y'];
    return b;
}
js.com.cs.v1.Util.GeneralUtil.marginBoxH = function js_com_cs_v1_Util_GeneralUtil$marginBoxH(node) {
    /// <param name="node" type="Object" domElement="true">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    if (isNullOrUndefined(node)) {
        throw new Error('Please specify \'node\' in marginBoxH');
    }
    var mb = dojoClass.marginBox(node);
    return mb.h;
}
js.com.cs.v1.Util.GeneralUtil.marginBoxW = function js_com_cs_v1_Util_GeneralUtil$marginBoxW(node) {
    /// <param name="node" type="Object" domElement="true">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    if (isNullOrUndefined(node)) {
        throw new Error('Please specify \'node\' in marginBoxW');
    }
    var mb = dojoClass.marginBox(node);
    return mb.w;
}
js.com.cs.v1.Util.GeneralUtil.compareDelegate = function js_com_cs_v1_Util_GeneralUtil$compareDelegate(delegateA, delegateB) {
    /// <summary>
    /// Checks whether two delegates in JS are exactly the same delegate
    /// </summary>
    /// <param name="delegateA" type="Delegate">
    /// </param>
    /// <param name="delegateB" type="Delegate">
    /// </param>
    /// <returns type="Boolean"></returns>
    if (delegateA == null && delegateB == null) {
        return true;
    }
    if (delegateA == null || delegateB == null) {
        return false;
    }
    var targetsA = delegateA._targets;
    var targetsB = delegateB._targets;
    return targetsA[0] === targetsB[0] && targetsA[1] === targetsB[1];
}
js.com.cs.v1.Util.GeneralUtil.getDelegateFunction = function js_com_cs_v1_Util_GeneralUtil$getDelegateFunction(d) {
    /// <param name="d" type="Delegate">
    /// </param>
    /// <returns type="Object"></returns>
    var targets = d._targets;
    return targets[1];
}
js.com.cs.v1.Util.GeneralUtil.getDelegateScope = function js_com_cs_v1_Util_GeneralUtil$getDelegateScope(d) {
    /// <param name="d" type="Delegate">
    /// </param>
    /// <returns type="Object"></returns>
    var targets = d._targets;
    return targets[0];
}
js.com.cs.v1.Util.GeneralUtil.getActualDelegate = function js_com_cs_v1_Util_GeneralUtil$getActualDelegate(delegateFn) {
    /// <param name="delegateFn" type="Delegate">
    /// </param>
    /// <returns type="Delegate"></returns>
    var targetsA = delegateFn._targets;
    return targetsA[1];
}
js.com.cs.v1.Util.GeneralUtil.hitch = function js_com_cs_v1_Util_GeneralUtil$hitch(scope, fn) {
    /// <param name="scope" type="Object">
    /// </param>
    /// <param name="fn" type="Function">
    /// </param>
    /// <returns type="Function"></returns>
    var f = function() { fn.apply(scope, arguments); };
    return f;
}
js.com.cs.v1.Util.GeneralUtil.isDojo = function js_com_cs_v1_Util_GeneralUtil$isDojo() {
    /// <returns type="Boolean"></returns>
    try {
        var obj = dojo;
        return true;
    }
    catch (ex) {
        return false;
    }
}
js.com.cs.v1.Util.GeneralUtil.isJQuery = function js_com_cs_v1_Util_GeneralUtil$isJQuery() {
    /// <returns type="Boolean"></returns>
    try {
        return !isNullOrUndefined(jQuery);
    }
    catch (ex) {
        return false;
    }
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Util.KeyboardUtil

js.com.cs.v1.Util.KeyboardUtil = function js_com_cs_v1_Util_KeyboardUtil() {
    /// <field name="_browseR_SHORTCUTS_DISABLED" type="Boolean" static="true">
    /// </field>
    /// <field name="_disableD_BROWSER_SHORTCUTS" type="Array" elementType="String" static="true">
    /// </field>
}
js.com.cs.v1.Util.KeyboardUtil._domDoc_onKeyPressWithEvent = function js_com_cs_v1_Util_KeyboardUtil$_domDoc_onKeyPressWithEvent(sender, e) {
    /// <param name="sender" type="Object">
    /// </param>
    /// <param name="e" type="Event">
    /// </param>
    for (var i = 0; i < js.com.cs.v1.Util.KeyboardUtil._disableD_BROWSER_SHORTCUTS.length; i++) {
        var shortcut = js.com.cs.v1.Util.KeyboardUtil._disableD_BROWSER_SHORTCUTS[i];
        var requiresCtrl = shortcut.indexOf('ctrl') !== -1;
        var requiresAlt = shortcut.indexOf('alt') !== -1;
        var requiresShift = shortcut.indexOf('shift') !== -1;
        var items = shortcut.split('+');
        var c = items[items.length - 1].charAt(0);
        var cPressed = js.com.cs.v1.Util.KeyboardUtil.getCharCode(e);
        if (cPressed === c && (!requiresCtrl || e.ctrlKey) && (!requiresCtrl || e.altKey) && (!requiresShift || e.shiftKey)) {
            js.com.cs.v1.Util.EventUtil.preventDefault(e);
            break;
        }
    }
}
js.com.cs.v1.Util.KeyboardUtil.disableDefaultBrowserShortcut = function js_com_cs_v1_Util_KeyboardUtil$disableDefaultBrowserShortcut(shortcutKeys) {
    /// <summary>
    /// Disable  browser shortcut default
    /// </summary>
    /// <param name="shortcutKeys" type="String">
    /// </param>
    if (!js.com.cs.v1.Util.KeyboardUtil._browseR_SHORTCUTS_DISABLED) {
        var domDoc = new js.com.cs.v1.Controls.Common.MyDOMElement(document.documentElement);
        domDoc.add_onKeyPressWithEvent(Delegate.create(null, js.com.cs.v1.Util.KeyboardUtil._domDoc_onKeyPressWithEvent));
        js.com.cs.v1.Util.KeyboardUtil._browseR_SHORTCUTS_DISABLED = true;
    }
    js.com.cs.v1.Util.KeyboardUtil.enableDefaultBrowserShortcut(shortcutKeys);
    js.com.cs.v1.Util.KeyboardUtil._disableD_BROWSER_SHORTCUTS[js.com.cs.v1.Util.KeyboardUtil._disableD_BROWSER_SHORTCUTS.length] = shortcutKeys.toLowerCase();
}
js.com.cs.v1.Util.KeyboardUtil.enableDefaultBrowserShortcut = function js_com_cs_v1_Util_KeyboardUtil$enableDefaultBrowserShortcut(shortcutKeys) {
    /// <summary>
    /// Re-enables a browser shortcut
    /// </summary>
    /// <param name="shortcutKeys" type="String">
    /// </param>
    js.com.cs.v1.Util.ArrayUtil.removeObjectsFromArray(js.com.cs.v1.Util.KeyboardUtil._disableD_BROWSER_SHORTCUTS, shortcutKeys);
}
js.com.cs.v1.Util.KeyboardUtil.addShortcutHandler = function js_com_cs_v1_Util_KeyboardUtil$addShortcutHandler(shortcutKeys, handler) {
    /// <summary>
    /// Add a keyboard combination shortcut.
    /// IMPORTANT: You must include shortcut.js in /_common/js/shortcuts/shortcut.js
    /// </summary>
    /// <param name="shortcutKeys" type="String">
    /// </param>
    /// <param name="handler" type="DOMEventHandler">
    /// Handler to call
    /// </param>
    var s = shortcut;
    s.add(shortcutKeys, handler);
    js.com.cs.v1.Util.KeyboardUtil.disableDefaultBrowserShortcut(shortcutKeys);
}
js.com.cs.v1.Util.KeyboardUtil.removeShortcutHandler = function js_com_cs_v1_Util_KeyboardUtil$removeShortcutHandler(shortcutKeys) {
    /// <summary>
    /// Removes a previously added shortcut
    /// </summary>
    /// <param name="shortcutKeys" type="String">
    /// </param>
    var s = shortcut;
    s.remove(shortcutKeys);
    js.com.cs.v1.Util.KeyboardUtil.enableDefaultBrowserShortcut(shortcutKeys);
}
js.com.cs.v1.Util.KeyboardUtil.getCharCode = function js_com_cs_v1_Util_KeyboardUtil$getCharCode(e) {
    /// <summary>
    /// Retrieves the character code from an event since it is not exposed
    /// </summary>
    /// <param name="e" type="Event">
    /// </param>
    /// <returns type="String"></returns>
    return String.fromCharCode(e.charCode).charAt(0);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Util.NumberUtil

js.com.cs.v1.Util.NumberUtil = function js_com_cs_v1_Util_NumberUtil() {
}
js.com.cs.v1.Util.NumberUtil.getChildControls = function js_com_cs_v1_Util_NumberUtil$getChildControls(elem) {
    /// <summary>
    /// Returns all the child controls in one list
    /// </summary>
    /// <param name="elem" type="js.com.cs.v1.Controls.Common.MyDOMElement">
    /// </param>
    /// <returns type="Array" elementType="MyDOMElement"></returns>
    if (Type.canCast(elem, Object)) {
        elem = new js.com.cs.v1.Controls.Common.MyDOMElement(elem);
    }
    var list = new js.com.cs.v1.General.Arrays.MyArray();
    var curr = elem;
    list.push(curr);
    for (var i = 0; i < elem.domElement.children.length; i++) {
        var currList = js.com.cs.v1.Util.NumberUtil.getChildControls(elem.domElement.children[i]);
        for (var j = 0; j < currList.length; j++) {
            list.push(currList[j]);
        }
    }
    return list.getBaseArray();
}
js.com.cs.v1.Util.NumberUtil.getViewPort = function js_com_cs_v1_Util_NumberUtil$getViewPort() {
    /// <returns type="js.org.Dojo.DojoObjects._Box"></returns>
    var w = 0;
    var h = 0;
    var de = document.documentElement;
    var dew = de.clientWidth;
    var deh = de.clientHeight;
    if (dojoClass.isMozilla > 0) {
        var minw, minh, maxw, maxh;
        var dbw = document.body.clientWidth;
        if (dbw > dew) {
            minw = dew;
            maxw = dbw;
        }
        else {
            maxw = dew;
            minw = dbw;
        }
        var dbh = document.body.clientHeight;
        if (dbh > deh) {
            minh = deh;
            maxh = dbh;
        }
        else {
            maxh = deh;
            minh = dbh;
        }
        w = (maxw > window.innerWidth) ? minw : maxw;
        h = (maxh > window.innerHeight) ? minh : maxh;
    }
    else if (dojoClass.isOpera === 0 && ((window.innerWidth)) !== 0) {
        w = window.innerWidth;
        h = window.innerHeight;
    }
    else if (dojoClass.isIE > 0 && de != null && deh !== 0) {
        w = dew;
        h = deh;
    }
    else if (dojo.body().clientWidth !== 0) {
        w = dojo.body().clientWidth;
        h = dojo.body().clientHeight;
    }
    var scroll = dojo._docScroll();
    var b = new js.org.Dojo.DojoObjects._Box();
    b.w = w;
    b.h = h;
    b.l = scroll['x'];
    b.t = scroll['y'];
    return b;
}
js.com.cs.v1.Util.NumberUtil.marginBoxH = function js_com_cs_v1_Util_NumberUtil$marginBoxH(node) {
    /// <param name="node" type="Object" domElement="true">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    if (isNullOrUndefined(node)) {
        throw new Error('Please specify \'node\' in marginBoxH');
    }
    var mb = dojoClass.marginBox(node);
    return mb.h;
}
js.com.cs.v1.Util.NumberUtil.marginBoxW = function js_com_cs_v1_Util_NumberUtil$marginBoxW(node) {
    /// <param name="node" type="Object" domElement="true">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    if (isNullOrUndefined(node)) {
        throw new Error('Please specify \'node\' in marginBoxW');
    }
    var mb = dojoClass.marginBox(node);
    return mb.w;
}
js.com.cs.v1.Util.NumberUtil.compareDelegate = function js_com_cs_v1_Util_NumberUtil$compareDelegate(delegateA, delegateB) {
    /// <summary>
    /// Checks whether two delegates in JS are exactly the same delegate
    /// </summary>
    /// <param name="delegateA" type="Delegate">
    /// </param>
    /// <param name="delegateB" type="Delegate">
    /// </param>
    /// <returns type="Boolean"></returns>
    if (delegateA == null && delegateB == null) {
        return true;
    }
    if (delegateA == null || delegateB == null) {
        return false;
    }
    var targetsA = delegateA._targets;
    var targetsB = delegateB._targets;
    return targetsA[0] === targetsB[0] && targetsA[1] === targetsB[1];
}
js.com.cs.v1.Util.NumberUtil.getDelegateFunction = function js_com_cs_v1_Util_NumberUtil$getDelegateFunction(d) {
    /// <param name="d" type="Delegate">
    /// </param>
    /// <returns type="Object"></returns>
    var targets = d._targets;
    return targets[1];
}
js.com.cs.v1.Util.NumberUtil.getDelegateScope = function js_com_cs_v1_Util_NumberUtil$getDelegateScope(d) {
    /// <param name="d" type="Delegate">
    /// </param>
    /// <returns type="Object"></returns>
    var targets = d._targets;
    return targets[0];
}
js.com.cs.v1.Util.NumberUtil.getActualDelegate = function js_com_cs_v1_Util_NumberUtil$getActualDelegate(delegateFn) {
    /// <param name="delegateFn" type="Delegate">
    /// </param>
    /// <returns type="Delegate"></returns>
    var targetsA = delegateFn._targets;
    return targetsA[1];
}
js.com.cs.v1.Util.NumberUtil.hitch = function js_com_cs_v1_Util_NumberUtil$hitch(scope, fn) {
    /// <param name="scope" type="Object">
    /// </param>
    /// <param name="fn" type="Function">
    /// </param>
    /// <returns type="Function"></returns>
    var f = function() { fn.apply(scope, arguments); };
    return f;
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Util.RandomUtil

js.com.cs.v1.Util.RandomUtil = function js_com_cs_v1_Util_RandomUtil() {
}
js.com.cs.v1.Util.RandomUtil.getRandomBool = function js_com_cs_v1_Util_RandomUtil$getRandomBool() {
    /// <returns type="Boolean"></returns>
    return js.com.cs.v1.Util.RandomUtil.getRandomNumber() < 0.5;
}
js.com.cs.v1.Util.RandomUtil.getRandomNumber = function js_com_cs_v1_Util_RandomUtil$getRandomNumber(from, to) {
    /// <param name="from" type="Number">
    /// </param>
    /// <param name="to" type="Number">
    /// </param>
    /// <returns type="Number"></returns>
    if (isNullOrUndefined(from) && isNullOrUndefined(to)) {
        return Math.random();
    }
    else if (!isNullOrUndefined(from) && isNullOrUndefined(to)) {
        to = from;
        from = 0;
    }
    var range = to - from;
    var n = Math.random() * range;
    js.com.cs.v1.Util.Console.log(n);
    return n + from;
}
js.com.cs.v1.Util.RandomUtil.getRandomInteger = function js_com_cs_v1_Util_RandomUtil$getRandomInteger(from, to) {
    /// <param name="from" type="Number" integer="true">
    /// </param>
    /// <param name="to" type="Number" integer="true">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    return parseInt(((to - from) * js.com.cs.v1.Util.RandomUtil.getRandomNumber())) + from;
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Util.StringUtil

js.com.cs.v1.Util.StringUtil = function js_com_cs_v1_Util_StringUtil() {
}
js.com.cs.v1.Util.StringUtil.countWords = function js_com_cs_v1_Util_StringUtil$countWords(s) {
    /// <param name="s" type="String">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    return js.com.cs.v1.Util.StringUtil.getWords(s).get_length();
}
js.com.cs.v1.Util.StringUtil.getWords = function js_com_cs_v1_Util_StringUtil$getWords(s) {
    /// <param name="s" type="String">
    /// </param>
    /// <returns type="js.com.cs.v1.General.Arrays.MyArray"></returns>
    var y = s;
    var regExp = new RegExp('\\s', 'g');
    var a = y.replace(regExp, ' ').split(' ');
    var words = new js.com.cs.v1.General.Arrays.MyArray();
    for (var z = 0; z < a.length; z++) {
        if (a[z].length > 0) {
            words.push(a[z]);
        }
    }
    return words;
}
js.com.cs.v1.Util.StringUtil.getWordIndex = function js_com_cs_v1_Util_StringUtil$getWordIndex(str, wordIndex) {
    /// <param name="str" type="String">
    /// </param>
    /// <param name="wordIndex" type="Number" integer="true">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    var index = 0;
    var isWhiteSpace = true;
    for (var i = 0; i < str.length; i++) {
        var chr = str.charAt(i);
        if (chr === ' ' || chr === '\r' || chr === '\n' || chr === '\t') {
            isWhiteSpace = true;
        }
        else {
            if (isWhiteSpace) {
                isWhiteSpace = false;
                if (index === wordIndex) {
                    return i;
                }
                index++;
            }
        }
    }
    return -1;
}
js.com.cs.v1.Util.StringUtil.formatNumberDojo = function js_com_cs_v1_Util_StringUtil$formatNumberDojo(num, decimalPlaces) {
    /// <summary>
    /// Make sure somewhere you call dojo.require('dojo.number')
    /// </summary>
    /// <param name="num" type="Number">
    /// </param>
    /// <param name="decimalPlaces" type="Number" integer="true">
    /// </param>
    /// <returns type="String"></returns>
    return js.com.cs.v1.Util.StringUtil.formatNumber(num, decimalPlaces);
    var opts = {};
    opts.places = decimalPlaces;
    return dojo.number.format(num, opts);
}
js.com.cs.v1.Util.StringUtil.formatNumber = function js_com_cs_v1_Util_StringUtil$formatNumber(num, decimalPlaces) {
    /// <param name="num" type="Number">
    /// </param>
    /// <param name="decimalPlaces" type="Number" integer="true">
    /// </param>
    /// <returns type="String"></returns>
    return num.toFixed(decimalPlaces);
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Util.URLUtil

js.com.cs.v1.Util.URLUtil = function js_com_cs_v1_Util_URLUtil() {
}
js.com.cs.v1.Util.URLUtil.removeQueryString = function js_com_cs_v1_Util_URLUtil$removeQueryString(url) {
    /// <param name="url" type="String">
    /// </param>
    /// <returns type="String"></returns>
    if (url.indexOf('?') !== -1) {
        url = url.substring(0, url.indexOf('?'));
    }
    return url;
}
js.com.cs.v1.Util.URLUtil.getQueryString = function js_com_cs_v1_Util_URLUtil$getQueryString(url) {
    /// <param name="url" type="String">
    /// </param>
    /// <returns type="String"></returns>
    if (url.indexOf('?') !== -1) {
        return url.substring(url.indexOf('?') + 1, url.length);
    }
    return url;
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Util.ValidationUtil

js.com.cs.v1.Util.ValidationUtil = function js_com_cs_v1_Util_ValidationUtil() {
}


////////////////////////////////////////////////////////////////////////////////
// js.com.cs.v1.Util.WindowUtil

js.com.cs.v1.Util.WindowUtil = function js_com_cs_v1_Util_WindowUtil() {
}
js.com.cs.v1.Util.WindowUtil.add_onScroll = function js_com_cs_v1_Util_WindowUtil$add_onScroll(value) {
    /// <param name="value" type="Function" />
    window.attachEvent('onscroll', value);
}
js.com.cs.v1.Util.WindowUtil.remove_onScroll = function js_com_cs_v1_Util_WindowUtil$remove_onScroll(value) {
    /// <param name="value" type="Function" />
    window.detachEvent('onscroll', value);
}
js.com.cs.v1.Util.WindowUtil.add_onResize = function js_com_cs_v1_Util_WindowUtil$add_onResize(value) {
    /// <param name="value" type="Function" />
    window.attachEvent('onresize', value);
}
js.com.cs.v1.Util.WindowUtil.remove_onResize = function js_com_cs_v1_Util_WindowUtil$remove_onResize(value) {
    /// <param name="value" type="Function" />
    window.detachEvent('onresize', value);
}
js.com.cs.v1.Util.WindowUtil.changeLocation = function js_com_cs_v1_Util_WindowUtil$changeLocation(newLocation) {
    /// <param name="newLocation" type="String">
    /// </param>
    var windowLocation = window;
    windowLocation.location = newLocation;
}
js.com.cs.v1.Util.WindowUtil.redirectParentFrame = function js_com_cs_v1_Util_WindowUtil$redirectParentFrame(url) {
    /// <param name="url" type="String">
    /// </param>
    window.parent.location.href = url;
}


js.com.cs.v1.AJAX.AjaxClass.createClass('js.com.cs.v1.AJAX.AjaxClass');
js.com.cs.v1.Controls.Common.LoadingCtrl.createClass('js.com.cs.v1.Controls.Common.LoadingCtrl');
js.com.cs.v1.Controls.Common.MyDOMElement.createClass('js.com.cs.v1.Controls.Common.MyDOMElement', null, js.com.cs.v1.Controls.Common.IMyDOMElement);
js.com.cs.v1.Controls.Common.MyAnchorElement.createClass('js.com.cs.v1.Controls.Common.MyAnchorElement', js.com.cs.v1.Controls.Common.MyDOMElement);
js.com.cs.v1.Controls.Common.MyDivElement.createClass('js.com.cs.v1.Controls.Common.MyDivElement', js.com.cs.v1.Controls.Common.MyDOMElement);
js.com.cs.v1.Controls.Common.MyFormElement.createClass('js.com.cs.v1.Controls.Common.MyFormElement', js.com.cs.v1.Controls.Common.MyDOMElement, js.com.cs.v1.Controls.Common.IMyDOMElement);
js.com.cs.v1.Controls.Common.MyImageElement.createClass('js.com.cs.v1.Controls.Common.MyImageElement', js.com.cs.v1.Controls.Common.MyDOMElement);
js.com.cs.v1.Controls.Common.MyInputElement.createClass('js.com.cs.v1.Controls.Common.MyInputElement', js.com.cs.v1.Controls.Common.MyDOMElement, js.com.cs.v1.Controls.Common.IMyDOMElement);
js.com.cs.v1.Controls.Common.MyLabelElement.createClass('js.com.cs.v1.Controls.Common.MyLabelElement', js.com.cs.v1.Controls.Common.MyDOMElement);
js.com.cs.v1.Controls.Common.MyListItemElem.createClass('js.com.cs.v1.Controls.Common.MyListItemElem', js.com.cs.v1.Controls.Common.MyDOMElement);
js.com.cs.v1.Controls.Common.MyParagraphElement.createClass('js.com.cs.v1.Controls.Common.MyParagraphElement', js.com.cs.v1.Controls.Common.MyDOMElement);
js.com.cs.v1.Controls.Common.MySpanElement.createClass('js.com.cs.v1.Controls.Common.MySpanElement', js.com.cs.v1.Controls.Common.MyDOMElement);
js.com.cs.v1.Controls.Common.MyTableCellElement.createClass('js.com.cs.v1.Controls.Common.MyTableCellElement', js.com.cs.v1.Controls.Common.MyDOMElement);
js.com.cs.v1.Controls.Common.MyTableElement.createClass('js.com.cs.v1.Controls.Common.MyTableElement', js.com.cs.v1.Controls.Common.MyDOMElement);
js.com.cs.v1.Controls.Common.MyTableRowElement.createClass('js.com.cs.v1.Controls.Common.MyTableRowElement', js.com.cs.v1.Controls.Common.MyDOMElement);
js.com.cs.v1.Controls.Common.MyUnOrderedListElem.createClass('js.com.cs.v1.Controls.Common.MyUnOrderedListElem', js.com.cs.v1.Controls.Common.MyDOMElement);
js.com.cs.v1.Controls.Common.ListingControl.Column.createClass('js.com.cs.v1.Controls.Common.ListingControl.Column');
js.com.cs.v1.Controls.Common.ListingControl.Listing.createClass('js.com.cs.v1.Controls.Common.ListingControl.Listing');
js.com.cs.v1.Controls.Common.ListingControl.ListingItemRow.createClass('js.com.cs.v1.Controls.Common.ListingControl.ListingItemRow');
js.com.cs.v1.Controls.Common.ListingControl._rowButtonInstance.createClass('js.com.cs.v1.Controls.Common.ListingControl._rowButtonInstance');
js.com.cs.v1.Controls.Common.ListingControl.RowButton.createClass('js.com.cs.v1.Controls.Common.ListingControl.RowButton');
js.com.cs.v1.Controls.Dojo.Form.MyHorizontalRuleLabels.createClass('js.com.cs.v1.Controls.Dojo.Form.MyHorizontalRuleLabels');
js.com.cs.v1.Controls.Dojo.Form.MyHorizontalSlider.createClass('js.com.cs.v1.Controls.Dojo.Form.MyHorizontalSlider');
js.com.cs.v1.Controls.Dojo.Layout.MyContentPane.createClass('js.com.cs.v1.Controls.Dojo.Layout.MyContentPane');
js.com.cs.v1.Controls.Dojo.Layout.MySplitContainer.createClass('js.com.cs.v1.Controls.Dojo.Layout.MySplitContainer');
js.com.cs.v1.Controls.Form.MyBaseFormElement.createClass('js.com.cs.v1.Controls.Form.MyBaseFormElement', js.com.cs.v1.Controls.Common.MyDOMElement);
js.com.cs.v1.Controls.Form.MyBaseButton.createClass('js.com.cs.v1.Controls.Form.MyBaseButton', js.com.cs.v1.Controls.Form.MyBaseFormElement);
js.com.cs.v1.Controls.Form.MyButton.createClass('js.com.cs.v1.Controls.Form.MyButton', js.com.cs.v1.Controls.Form.MyBaseButton, js.com.cs.v1.Controls.Form.IMyButtonElement);
js.com.cs.v1.Controls.Form.MyCheckBox.createClass('js.com.cs.v1.Controls.Form.MyCheckBox', js.com.cs.v1.Controls.Form.MyBaseFormElement, js.com.cs.v1.Controls.Form.IMyBaseFormElement);
js.com.cs.v1.Controls.Form.MyDropDownList.createClass('js.com.cs.v1.Controls.Form.MyDropDownList', js.com.cs.v1.Controls.Form.MyBaseFormElement, js.com.cs.v1.Controls.Form.IMyBaseFormElement);
js.com.cs.v1.Controls.Form.MyFileUpload.createClass('js.com.cs.v1.Controls.Form.MyFileUpload', js.com.cs.v1.Controls.Form.MyBaseFormElement, js.com.cs.v1.Controls.Form.IMyBaseFormElement);
js.com.cs.v1.Controls.Form.MyRadioButton.createClass('js.com.cs.v1.Controls.Form.MyRadioButton', js.com.cs.v1.Controls.Form.MyBaseFormElement, js.com.cs.v1.Controls.Form.IMyBaseFormElement);
js.com.cs.v1.Controls.Form.MyTextBox.createClass('js.com.cs.v1.Controls.Form.MyTextBox', js.com.cs.v1.Controls.Form.MyBaseFormElement, js.com.cs.v1.Controls.Form.IMyBaseFormElement);
js.com.cs.v1.Controls.Form.MyTextBoxHidden.createClass('js.com.cs.v1.Controls.Form.MyTextBoxHidden', js.com.cs.v1.Controls.Form.MyTextBox);
js.com.cs.v1.Controls.Form.MyTextBoxMultiLine.createClass('js.com.cs.v1.Controls.Form.MyTextBoxMultiLine', js.com.cs.v1.Controls.Form.MyTextBox);
js.com.cs.v1.Controls.Form.MyTextBoxPassword.createClass('js.com.cs.v1.Controls.Form.MyTextBoxPassword', js.com.cs.v1.Controls.Form.MyTextBox);
js.com.cs.v1.Controls.Form.MyTextBoxSingleLine.createClass('js.com.cs.v1.Controls.Form.MyTextBoxSingleLine', js.com.cs.v1.Controls.Form.MyTextBox);
js.com.cs.v1.Controls.Form.Specialized.MyDropDownListMenu.createClass('js.com.cs.v1.Controls.Form.Specialized.MyDropDownListMenu');
js.com.cs.v1.General.ListItem.createClass('js.com.cs.v1.General.ListItem');
js.com.cs.v1.Controls.Form.Specialized.MyDropDownListMenuListItem.createClass('js.com.cs.v1.Controls.Form.Specialized.MyDropDownListMenuListItem', js.com.cs.v1.General.ListItem);
js.com.cs.v1.Controls.Specialized.Tree.Tree.createClass('js.com.cs.v1.Controls.Specialized.Tree.Tree');
js.com.cs.v1.Controls.Specialized.Tree.TreeItem.createClass('js.com.cs.v1.Controls.Specialized.Tree.TreeItem');
js.com.cs.v1.Events.EventItem.createClass('js.com.cs.v1.Events.EventItem');
js.com.cs.v1.Events.EventsHandler.createClass('js.com.cs.v1.Events.EventsHandler');
js.com.cs.v1.Events.GenericEventItem.createClass('js.com.cs.v1.Events.GenericEventItem');
js.com.cs.v1.Events.GenericEventsHandler.createClass('js.com.cs.v1.Events.GenericEventsHandler');
js.com.cs.v1.Forms.FileUploader.UploadProgress.createClass('js.com.cs.v1.Forms.FileUploader.UploadProgress');
js.com.cs.v1.Forms.linkedMenu.LinkedMenu.createClass('js.com.cs.v1.Forms.linkedMenu.LinkedMenu');
js.com.cs.v1.Forms.linkedMenu.LinkedMenuComboBox.createClass('js.com.cs.v1.Forms.linkedMenu.LinkedMenuComboBox');
js.com.cs.v1.Forms.linkedMenu.LinkedMenuLevel.createClass('js.com.cs.v1.Forms.linkedMenu.LinkedMenuLevel');
js.com.cs.v1.Forms.Validation.WordsOrCharsLimit.createClass('js.com.cs.v1.Forms.Validation.WordsOrCharsLimit');
js.com.cs.v1.Forms.Validation.CharsLimit.createClass('js.com.cs.v1.Forms.Validation.CharsLimit', js.com.cs.v1.Forms.Validation.WordsOrCharsLimit);
js.com.cs.v1.Forms.Validation.VALIDATION_PARAMETERS.createClass('js.com.cs.v1.Forms.Validation.VALIDATION_PARAMETERS');
js.com.cs.v1.Forms.Validation.OUTPUT_ERROR_MSG.createClass('js.com.cs.v1.Forms.Validation.OUTPUT_ERROR_MSG');
js.com.cs.v1.Forms.Validation.Validation.createClass('js.com.cs.v1.Forms.Validation.Validation');
js.com.cs.v1.Forms.Validation.WordsLimit.createClass('js.com.cs.v1.Forms.Validation.WordsLimit', js.com.cs.v1.Forms.Validation.WordsOrCharsLimit);
js.com.cs.v1.General.Arrays.MyArray.createClass('js.com.cs.v1.General.Arrays.MyArray', null, IArray, IEnumerable);
js.com.cs.v1.General.Arrays.MyArrayInt.createClass('js.com.cs.v1.General.Arrays.MyArrayInt', js.com.cs.v1.General.Arrays.MyArray);
js.com.cs.v1.General.Arrays.MyArrayString.createClass('js.com.cs.v1.General.Arrays.MyArrayString', js.com.cs.v1.General.Arrays.MyArray);
js.com.cs.v1.General.GeneralClass.createClass('js.com.cs.v1.General.GeneralClass');
js.com.cs.v1.General.General.createClass('js.com.cs.v1.General.General');
js.com.cs.v1.UI.Forms.Button.createClass('js.com.cs.v1.UI.Forms.Button');
js.com.cs.v1.UI.Forms.CheckBoxListRequired.createClass('js.com.cs.v1.UI.Forms.CheckBoxListRequired');
js.com.cs.v1.UI.Forms.DefaultCSSClasses.createClass('js.com.cs.v1.UI.Forms.DefaultCSSClasses');
js.com.cs.v1.UI.Forms.DojoComboBox.createClass('js.com.cs.v1.UI.Forms.DojoComboBox');
js.com.cs.v1.UI.Forms.Field.createClass('js.com.cs.v1.UI.Forms.Field');
js.com.cs.v1.UI.Forms.FieldCSSHandler.createClass('js.com.cs.v1.UI.Forms.FieldCSSHandler');
js.com.cs.v1.UI.Forms.FIELDGROUP_PARAMETERS.createClass('js.com.cs.v1.UI.Forms.FIELDGROUP_PARAMETERS');
js.com.cs.v1.UI.Forms.FieldGroup.createClass('js.com.cs.v1.UI.Forms.FieldGroup');
js.com.cs.v1.UI.Forms.FieldInputConstraint.createClass('js.com.cs.v1.UI.Forms.FieldInputConstraint');
js.com.cs.v1.UI.Forms.FieldValidator.createClass('js.com.cs.v1.UI.Forms.FieldValidator');
js.com.cs.v1.UI.Forms.Form.createClass('js.com.cs.v1.UI.Forms.Form');
js.com.cs.v1.UI.Forms.FormError.createClass('js.com.cs.v1.UI.Forms.FormError');
js.com.cs.v1.UI.Forms.FormsCollection.createClass('js.com.cs.v1.UI.Forms.FormsCollection');
js.com.cs.v1.UI.Image.createClass('js.com.cs.v1.UI.Image');
js.com.cs.v1.UI.Text.TextOneLineWidthCalculator.createClass('js.com.cs.v1.UI.Text.TextOneLineWidthCalculator');
js.com.cs.v1.UI.Ticker.FadingTicker.createClass('js.com.cs.v1.UI.Ticker.FadingTicker');
js.com.cs.v1.UI.Ticker.RotatingTicker.createClass('js.com.cs.v1.UI.Ticker.RotatingTicker');
js.com.cs.v1.URL.QueryString.createClass('js.com.cs.v1.URL.QueryString');
js.com.cs.v1.URL.URLHandler.createClass('js.com.cs.v1.URL.URLHandler');
js.com.cs.v1.Util.ArrayUtil.createClass('js.com.cs.v1.Util.ArrayUtil');
js.com.cs.v1.Util.Console.createClass('js.com.cs.v1.Util.Console');
js.com.cs.v1.Util.EventUtil.createClass('js.com.cs.v1.Util.EventUtil');
js.com.cs.v1.Util.FormUtil.createClass('js.com.cs.v1.Util.FormUtil');
js.com.cs.v1.Util.GeneralUtil.createClass('js.com.cs.v1.Util.GeneralUtil');
js.com.cs.v1.Util.KeyboardUtil.createClass('js.com.cs.v1.Util.KeyboardUtil');
js.com.cs.v1.Util.NumberUtil.createClass('js.com.cs.v1.Util.NumberUtil');
js.com.cs.v1.Util.RandomUtil.createClass('js.com.cs.v1.Util.RandomUtil');
js.com.cs.v1.Util.StringUtil.createClass('js.com.cs.v1.Util.StringUtil');
js.com.cs.v1.Util.URLUtil.createClass('js.com.cs.v1.Util.URLUtil');
js.com.cs.v1.Util.ValidationUtil.createClass('js.com.cs.v1.Util.ValidationUtil');
js.com.cs.v1.Util.WindowUtil.createClass('js.com.cs.v1.Util.WindowUtil');
js.com.cs.v1.Controls.Common.LoadingCtrl.fadE_IN_OUT_TIME = 200;
js.com.cs.v1.Forms.FileUploader.UploadProgress._Instance = null;
js.com.cs.v1.General.GeneralClass._Body = null;
js.com.cs.v1.UI.Forms.DefaultCSSClasses._Instance = null;
js.com.cs.v1.UI.Forms.DefaultCSSClasses.Instance = new js.com.cs.v1.UI.Forms.DefaultCSSClasses();
js.com.cs.v1.UI.Forms.FormsCollection._Instance = null;
js.com.cs.v1.UI.Forms.FormsCollection.CLICKED_BUTTON = false;
js.com.cs.v1.UI.Forms.FormsCollection.FORM_SUBMIT = false;
js.com.cs.v1.UI.Forms.FormsCollection.HasFileUpload = false;
js.com.cs.v1.Util.KeyboardUtil._browseR_SHORTCUTS_DISABLED = false;
js.com.cs.v1.Util.KeyboardUtil._disableD_BROWSER_SHORTCUTS = [];

// ---- Do not remove this footer ----
// This script was generated using Script# v0.5.5.0 (http://projects.nikhilk.net/ScriptSharp)
// -----------------------------------

